]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Derivation Path global replaced with function
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */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,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:0 0}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}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!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:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{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.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:"\2a"}.glyphicon-plus:before{content:"\2b"}.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"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-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}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;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}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,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.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,.h4,h5,.h5,h6,.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%}cite{font-style:normal}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:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{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}dt,dd{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[title],abbr[data-original-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 p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small: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 footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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%;-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-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{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-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{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-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{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-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{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}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{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>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{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>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{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=radio],input[type=checkbox]{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=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;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:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}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[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}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{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,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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 .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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 .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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.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 .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{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{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.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;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:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{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{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{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=submit].btn-block,input[type=reset].btn-block,input[type=button].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:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{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:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{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 solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@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>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-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-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-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=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.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-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.33;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}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].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}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control: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=radio],.input-group-addon input[type=checkbox]{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:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{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:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{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:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{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{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:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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:hover,.nav-tabs>li.active>a:focus{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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.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:hover,.nav-tabs-justified>.active>a:focus{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:hover,.nav-tabs-justified>.active>a:focus{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-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{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-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{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:hover,.navbar-brand:focus{text-decoration:none}@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>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.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 .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{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}}@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-form.navbar-right:last-child{margin-right:-15px}}.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{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}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{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:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{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:hover,.navbar-default .navbar-nav>.open>a:focus{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:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{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:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{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:hover,.navbar-inverse .navbar-nav>.open>a:focus{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:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{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:#428bca;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:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{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}.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}.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:hover,.pager li>a:focus{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:hover,.pager .disabled>a:focus,.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:hover,a.label:focus{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]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{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:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .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:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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:#428bca;-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-striped .progress-bar,.progress-bar-striped{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.active .progress-bar,.progress-bar.active{-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[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.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}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{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>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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.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{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.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>.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:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.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 iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.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:hover,.close:focus{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:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,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{min-height:16.43px;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-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.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;text-decoration:none;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right: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;text-align:left;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)}.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;font-weight:400;line-height:18px;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>img,.carousel-inner>.item>a>img{line-height:1}.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);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:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.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-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer: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;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.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}tr.visible-sm{display:table-row!important}th.visible-sm,td.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}tr.visible-md{display:table-row!important}th.visible-md,td.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}tr.visible-lg{display:table-row!important}th.visible-lg,td.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}tr.visible-print{display:table-row!important}th.visible-print,td.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}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="DC POS" name="author" />
15
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
47 </style>
48 </head>
49 <body>
50 <div class="container">
51
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
73 <select id="strength" class="strength form-control">
74 <option val="3">3</option>
75 <option val="6">6</option>
76 <option val="9">9</option>
77 <option val="12">12</option>
78 <option val="15" selected>15</option>
79 <option val="18">18</option>
80 <option val="21">21</option>
81 <option val="24">24</option>
82 </select>
83 <span class="input-group-btn">
84 <button class="btn generate">Generate Random Mnemonic</button>
85 </span>
86 </div>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
91 <div class="col-sm-10">
92 <textarea id="passphrase" class="passphrase form-control"></textarea>
93 </div>
94 </div>
95 <div class="form-group">
96 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
97 <div class="col-sm-10">
98 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
99 </div>
100 </div>
101 <div class="form-group">
102 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
103 <div class="col-sm-10">
104 <select id="network-phrase" class="network form-control">
105 <!-- populated by javascript -->
106 </select>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
111 <div class="col-sm-10">
112 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
113 </div>
114 </div>
115 </form>
116 </div>
117 </div>
118
119 <hr>
120
121 <div class="row">
122 <div class="col-md-12">
123 <h2>Derivation Path</h2>
124 <ul class="derivation-type nav nav-tabs" role="tablist">
125 <li id="bip44-tab" class="active">
126 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
127 </li>
128 <li id="bip32-tab">
129 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
130 </li>
131 </ul>
132 <div class="derivation-type tab-content">
133 <div id="bip44" class="tab-pane active">
134 <form class="form-horizontal" role="form">
135 <br>
136 <div class="col-sm-2"></div>
137 <div class="col-sm-10">
138 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
139 </div>
140 <div class="form-group">
141 <label for="purpose" class="col-sm-2 control-label">
142 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
143 </label>
144 <div class="col-sm-10">
145 <input id="purpose" type="text" class="purpose form-control" value="44">
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="coin" class="col-sm-2 control-label">
150 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
151 </label>
152 <div class="col-sm-10">
153 <input id="coin" type="text" class="coin form-control" value="0">
154 </div>
155 </div>
156 <div class="form-group">
157 <label for="account" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="account" type="text" class="account form-control" value="0">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="change" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="change" type="text" class="change form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
176 </div>
177 </div>
178 </form>
179 </div>
180 <div id="bip32" class="tab-pane">
181 <form class="form-horizontal" role="form">
182 <br>
183 <div class="col-sm-2"></div>
184 <div class="col-sm-10">
185 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
186 </div>
187 <div class="form-group">
188 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
189 <div class="col-sm-10">
190 <input id="bip32-path" type="text" class="path form-control" value="m/0">
191 </div>
192 </div>
193 <div class="form-group">
194 <label class="col-sm-2 control-label">Hive Wallet</label>
195 <div class="col-sm-10">
196 <p class="form-control no-border">
197 Use path <code>m/0'/0</code>.
198 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
199 </p>
200 </div>
201 </div>
202 <div class="form-group">
203 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
204 <div class="col-sm-10">
205 <p class="form-control no-border">
206 Use path <code>m/44'/0'/0'/0</code>.
207 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
208 </p>
209 </div>
210 </div>
211 </form>
212 </div>
213 </div>
214 <form class="form-horizontal" role="form">
215 <div class="form-group">
216 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
217 <div class="col-sm-10">
218 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
219 </div>
220 </div>
221 <div class="form-group">
222 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
223 <div class="col-sm-10">
224 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
225 </div>
226 </div>
227 </form>
228 </div>
229 </div>
230
231 <hr>
232
233 <div class="row">
234 <div class="col-md-12">
235 <h2>Derived Addresses</h2>
236 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
237 <table class="table table-striped">
238 <thead>
239 <th>
240 <div class="input-group">
241 Path&nbsp;&nbsp;
242 <button class="index-toggle">Toggle</button>
243 </div>
244 </th>
245 <th>
246 <div class="input-group">
247 Address&nbsp;&nbsp;
248 <button class="address-toggle">Toggle</button>
249 </div>
250 </th>
251 <th>
252 <div class="input-group">
253 Private Key&nbsp;&nbsp;
254 <button class="private-key-toggle">Toggle</button>
255 </div>
256 </th>
257 </thead>
258 <tbody class="addresses">
259 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
260 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
261 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
262 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
263 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
264 </tbody>
265 </table>
266 </div>
267 </div>
268 <span>Show next </button>
269 <input type="number" class="rows-to-add" value="20">
270 <button class="more">Show</button>
271
272 <hr>
273
274 <div class="row">
275 <div class="col-md-12">
276 <h2>More info</h2>
277 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
278 <p>
279 Read more at the
280 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
281 </p>
282 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
283 <p>
284 Read more at the
285 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
286 and see the demo at
287 <a href="http://bip32.org/" target="_blank">bip32.org</a>
288 </p>
289 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
290 <p>
291 Read more at the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
293 </p>
294 <h3>Private Keys</h3>
295 <p>
296 Use private keys at
297 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
298 but be careful - it can be easy to make mistakes if you
299 don't know what you're doing
300 </p>
301 </div>
302 </div>
303
304 <hr>
305
306 <div class="row">
307 <div class="col-md-12">
308
309 <h2>Offline Usage</h2>
310
311 <p>
312 You can use this tool without having to be online.
313 </p>
314 <p>
315 In your browser, select file save-as, and save this page
316 as a file.
317 </p>
318 <p>
319 Double-click that file to open it in a browser
320 on any offline computer.
321 </p>
322 <p>
323 Alternatively, download it from
324 <a href="https://github.com/dcpos/bip39">
325 https://github.com/dcpos/bip39
326 </a>
327
328 </div>
329 </div>
330
331 <hr>
332
333 <div class="row">
334 <div class="col-md-12">
335
336 <h2>This project is 100% open-source code</h2>
337
338 <p>
339 <span>Get the source code at - </span>
340 <a href="https://github.com/dcpos/bip39" target="_blank">
341 https://github.com/dcpos/bip39
342 </a>
343 </p>
344
345 <h3>Libraries</h3>
346
347 <p>
348 <span>BitcoinJS - </span>
349 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
350 https://github.com/bitcoinjs/bitcoinjs-lib
351 </a>
352 </p>
353
354 <p>
355 <span>jsBIP39 - </span>
356 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
357 https://github.com/iancoleman/jsbip39
358 </a>
359 </p>
360
361 <p>
362 <span>sjcl - </span>
363 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
364 https://github.com/bitwiseshiftleft/sjcl
365 </a>
366 </p>
367
368 <p>
369 <span>jQuery - </span>
370 <a href="https://jquery.com/" target="_blank">
371 https://jquery.com/
372 </a>
373 </p>
374
375 <p>
376 <span>Twitter Bootstrap - </span>
377 <a href="http://getbootstrap.com/" target="_blank">
378 http://getbootstrap.com/
379 </a>
380 </p>
381
382 </div>
383 </div>
384
385 </div>
386
387 <div class="feedback-container">
388 <div class="feedback">Loading...</div>
389 </div>
390
391 <script type="text/template" id="address-row-template">
392 <tr>
393 <td class="index"><span></span></td>
394 <td class="address"><span></span></td>
395 <td class="privkey"><span></span></td>
396 </tr>
397 </script>
398 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
399 !function(a,b){"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){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.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||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},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?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;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;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(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 ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(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){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.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===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||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 fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.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},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.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=fb.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=fb.selectors={cacheLength:50,createPseudo:hb,match:X,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(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===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]||fb.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]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.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(cb,db).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("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.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+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},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;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(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),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).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:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!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 Z.test(a.nodeName)},input:function(a){return Y.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:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?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]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.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=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[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?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(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 tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(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?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;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};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
400 },_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.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=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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 L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.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=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),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),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==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,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(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=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={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,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.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 this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(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&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.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 yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=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};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{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=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):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):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.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 Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.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;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.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=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.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)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.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;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
401 },removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.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){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},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)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.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 sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.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 tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(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}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(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}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(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 this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.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),n.isFunction(b)&&(b=b.call(a,c,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)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
402 </script>
403 <script>/*!
404 * Bootstrap v3.2.0 (http://getbootstrap.com)
405 * Copyright 2011-2014 Twitter, Inc.
406 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
407 */
408 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires 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){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(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.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):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.2.0",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]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},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")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&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);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(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).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){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.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},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(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&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},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",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(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){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.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").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(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 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.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&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",b).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+', [role="menu"], [role="listbox"]',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.$backdrop=this.isShown=null,this.scrollbarWidth=0,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.2.0",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 c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},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.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){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("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},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"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",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){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);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)),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.leave=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)),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 c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):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=b.top+g,b.left=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=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},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(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),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;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},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.width&&(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(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},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))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};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"!=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.2.0",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").empty()[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")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};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){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("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",e),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.2.0",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="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.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 g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");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")};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.2.0",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")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.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},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(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=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},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=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};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||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
409 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (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){
410 // (public) Constructor
411 function BigInteger(a, b, c) {
412 if (!(this instanceof BigInteger))
413 return new BigInteger(a, b, c)
414
415 if (a != null) {
416 if ("number" == typeof a) this.fromNumber(a, b, c)
417 else if (b == null && "string" != typeof a) this.fromString(a, 256)
418 else this.fromString(a, b)
419 }
420 }
421
422 var proto = BigInteger.prototype
423
424 // duck-typed isBigInteger
425 proto.__bigi = require('../package.json').version
426 BigInteger.isBigInteger = function (obj, check_ver) {
427 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
428 }
429
430 // Bits per digit
431 var dbits
432
433 // am: Compute w_j += (x*this_i), propagate carries,
434 // c is initial carry, returns final carry.
435 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
436 // We need to select the fastest one that works in this environment.
437
438 // am1: use a single mult and divide to get the high bits,
439 // max digit bits should be 26 because
440 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
441 function am1(i, x, w, j, c, n) {
442 while (--n >= 0) {
443 var v = x * this[i++] + w[j] + c
444 c = Math.floor(v / 0x4000000)
445 w[j++] = v & 0x3ffffff
446 }
447 return c
448 }
449 // am2 avoids a big mult-and-extract completely.
450 // Max digit bits should be <= 30 because we do bitwise ops
451 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
452 function am2(i, x, w, j, c, n) {
453 var xl = x & 0x7fff,
454 xh = x >> 15
455 while (--n >= 0) {
456 var l = this[i] & 0x7fff
457 var h = this[i++] >> 15
458 var m = xh * l + h * xl
459 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
460 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
461 w[j++] = l & 0x3fffffff
462 }
463 return c
464 }
465 // Alternately, set max digit bits to 28 since some
466 // browsers slow down when dealing with 32-bit numbers.
467 function am3(i, x, w, j, c, n) {
468 var xl = x & 0x3fff,
469 xh = x >> 14
470 while (--n >= 0) {
471 var l = this[i] & 0x3fff
472 var h = this[i++] >> 14
473 var m = xh * l + h * xl
474 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
475 c = (l >> 28) + (m >> 14) + xh * h
476 w[j++] = l & 0xfffffff
477 }
478 return c
479 }
480
481 // wtf?
482 BigInteger.prototype.am = am1
483 dbits = 26
484
485 BigInteger.prototype.DB = dbits
486 BigInteger.prototype.DM = ((1 << dbits) - 1)
487 var DV = BigInteger.prototype.DV = (1 << dbits)
488
489 var BI_FP = 52
490 BigInteger.prototype.FV = Math.pow(2, BI_FP)
491 BigInteger.prototype.F1 = BI_FP - dbits
492 BigInteger.prototype.F2 = 2 * dbits - BI_FP
493
494 // Digit conversions
495 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
496 var BI_RC = new Array()
497 var rr, vv
498 rr = "0".charCodeAt(0)
499 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
500 rr = "a".charCodeAt(0)
501 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
502 rr = "A".charCodeAt(0)
503 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
504
505 function int2char(n) {
506 return BI_RM.charAt(n)
507 }
508
509 function intAt(s, i) {
510 var c = BI_RC[s.charCodeAt(i)]
511 return (c == null) ? -1 : c
512 }
513
514 // (protected) copy this to r
515 function bnpCopyTo(r) {
516 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
517 r.t = this.t
518 r.s = this.s
519 }
520
521 // (protected) set from integer value x, -DV <= x < DV
522 function bnpFromInt(x) {
523 this.t = 1
524 this.s = (x < 0) ? -1 : 0
525 if (x > 0) this[0] = x
526 else if (x < -1) this[0] = x + DV
527 else this.t = 0
528 }
529
530 // return bigint initialized to value
531 function nbv(i) {
532 var r = new BigInteger()
533 r.fromInt(i)
534 return r
535 }
536
537 // (protected) set from string and radix
538 function bnpFromString(s, b) {
539 var self = this
540
541 var k
542 if (b == 16) k = 4
543 else if (b == 8) k = 3
544 else if (b == 256) k = 8; // byte array
545 else if (b == 2) k = 1
546 else if (b == 32) k = 5
547 else if (b == 4) k = 2
548 else {
549 self.fromRadix(s, b)
550 return
551 }
552 self.t = 0
553 self.s = 0
554 var i = s.length,
555 mi = false,
556 sh = 0
557 while (--i >= 0) {
558 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
559 if (x < 0) {
560 if (s.charAt(i) == "-") mi = true
561 continue
562 }
563 mi = false
564 if (sh == 0)
565 self[self.t++] = x
566 else if (sh + k > self.DB) {
567 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
568 self[self.t++] = (x >> (self.DB - sh))
569 } else
570 self[self.t - 1] |= x << sh
571 sh += k
572 if (sh >= self.DB) sh -= self.DB
573 }
574 if (k == 8 && (s[0] & 0x80) != 0) {
575 self.s = -1
576 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
577 }
578 self.clamp()
579 if (mi) BigInteger.ZERO.subTo(self, self)
580 }
581
582 // (protected) clamp off excess high words
583 function bnpClamp() {
584 var c = this.s & this.DM
585 while (this.t > 0 && this[this.t - 1] == c)--this.t
586 }
587
588 // (public) return string representation in given radix
589 function bnToString(b) {
590 var self = this
591 if (self.s < 0) return "-" + self.negate()
592 .toString(b)
593 var k
594 if (b == 16) k = 4
595 else if (b == 8) k = 3
596 else if (b == 2) k = 1
597 else if (b == 32) k = 5
598 else if (b == 4) k = 2
599 else return self.toRadix(b)
600 var km = (1 << k) - 1,
601 d, m = false,
602 r = "",
603 i = self.t
604 var p = self.DB - (i * self.DB) % k
605 if (i-- > 0) {
606 if (p < self.DB && (d = self[i] >> p) > 0) {
607 m = true
608 r = int2char(d)
609 }
610 while (i >= 0) {
611 if (p < k) {
612 d = (self[i] & ((1 << p) - 1)) << (k - p)
613 d |= self[--i] >> (p += self.DB - k)
614 } else {
615 d = (self[i] >> (p -= k)) & km
616 if (p <= 0) {
617 p += self.DB
618 --i
619 }
620 }
621 if (d > 0) m = true
622 if (m) r += int2char(d)
623 }
624 }
625 return m ? r : "0"
626 }
627
628 // (public) -this
629 function bnNegate() {
630 var r = new BigInteger()
631 BigInteger.ZERO.subTo(this, r)
632 return r
633 }
634
635 // (public) |this|
636 function bnAbs() {
637 return (this.s < 0) ? this.negate() : this
638 }
639
640 // (public) return + if this > a, - if this < a, 0 if equal
641 function bnCompareTo(a) {
642 var r = this.s - a.s
643 if (r != 0) return r
644 var i = this.t
645 r = i - a.t
646 if (r != 0) return (this.s < 0) ? -r : r
647 while (--i >= 0)
648 if ((r = this[i] - a[i]) != 0) return r
649 return 0
650 }
651
652 // returns bit length of the integer x
653 function nbits(x) {
654 var r = 1,
655 t
656 if ((t = x >>> 16) != 0) {
657 x = t
658 r += 16
659 }
660 if ((t = x >> 8) != 0) {
661 x = t
662 r += 8
663 }
664 if ((t = x >> 4) != 0) {
665 x = t
666 r += 4
667 }
668 if ((t = x >> 2) != 0) {
669 x = t
670 r += 2
671 }
672 if ((t = x >> 1) != 0) {
673 x = t
674 r += 1
675 }
676 return r
677 }
678
679 // (public) return the number of bits in "this"
680 function bnBitLength() {
681 if (this.t <= 0) return 0
682 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
683 }
684
685 // (public) return the number of bytes in "this"
686 function bnByteLength() {
687 return this.bitLength() >> 3
688 }
689
690 // (protected) r = this << n*DB
691 function bnpDLShiftTo(n, r) {
692 var i
693 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
694 for (i = n - 1; i >= 0; --i) r[i] = 0
695 r.t = this.t + n
696 r.s = this.s
697 }
698
699 // (protected) r = this >> n*DB
700 function bnpDRShiftTo(n, r) {
701 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
702 r.t = Math.max(this.t - n, 0)
703 r.s = this.s
704 }
705
706 // (protected) r = this << n
707 function bnpLShiftTo(n, r) {
708 var self = this
709 var bs = n % self.DB
710 var cbs = self.DB - bs
711 var bm = (1 << cbs) - 1
712 var ds = Math.floor(n / self.DB),
713 c = (self.s << bs) & self.DM,
714 i
715 for (i = self.t - 1; i >= 0; --i) {
716 r[i + ds + 1] = (self[i] >> cbs) | c
717 c = (self[i] & bm) << bs
718 }
719 for (i = ds - 1; i >= 0; --i) r[i] = 0
720 r[ds] = c
721 r.t = self.t + ds + 1
722 r.s = self.s
723 r.clamp()
724 }
725
726 // (protected) r = this >> n
727 function bnpRShiftTo(n, r) {
728 var self = this
729 r.s = self.s
730 var ds = Math.floor(n / self.DB)
731 if (ds >= self.t) {
732 r.t = 0
733 return
734 }
735 var bs = n % self.DB
736 var cbs = self.DB - bs
737 var bm = (1 << bs) - 1
738 r[0] = self[ds] >> bs
739 for (var i = ds + 1; i < self.t; ++i) {
740 r[i - ds - 1] |= (self[i] & bm) << cbs
741 r[i - ds] = self[i] >> bs
742 }
743 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
744 r.t = self.t - ds
745 r.clamp()
746 }
747
748 // (protected) r = this - a
749 function bnpSubTo(a, r) {
750 var self = this
751 var i = 0,
752 c = 0,
753 m = Math.min(a.t, self.t)
754 while (i < m) {
755 c += self[i] - a[i]
756 r[i++] = c & self.DM
757 c >>= self.DB
758 }
759 if (a.t < self.t) {
760 c -= a.s
761 while (i < self.t) {
762 c += self[i]
763 r[i++] = c & self.DM
764 c >>= self.DB
765 }
766 c += self.s
767 } else {
768 c += self.s
769 while (i < a.t) {
770 c -= a[i]
771 r[i++] = c & self.DM
772 c >>= self.DB
773 }
774 c -= a.s
775 }
776 r.s = (c < 0) ? -1 : 0
777 if (c < -1) r[i++] = self.DV + c
778 else if (c > 0) r[i++] = c
779 r.t = i
780 r.clamp()
781 }
782
783 // (protected) r = this * a, r != this,a (HAC 14.12)
784 // "this" should be the larger one if appropriate.
785 function bnpMultiplyTo(a, r) {
786 var x = this.abs(),
787 y = a.abs()
788 var i = x.t
789 r.t = i + y.t
790 while (--i >= 0) r[i] = 0
791 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
792 r.s = 0
793 r.clamp()
794 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
795 }
796
797 // (protected) r = this^2, r != this (HAC 14.16)
798 function bnpSquareTo(r) {
799 var x = this.abs()
800 var i = r.t = 2 * x.t
801 while (--i >= 0) r[i] = 0
802 for (i = 0; i < x.t - 1; ++i) {
803 var c = x.am(i, x[i], r, 2 * i, 0, 1)
804 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
805 r[i + x.t] -= x.DV
806 r[i + x.t + 1] = 1
807 }
808 }
809 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
810 r.s = 0
811 r.clamp()
812 }
813
814 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
815 // r != q, this != m. q or r may be null.
816 function bnpDivRemTo(m, q, r) {
817 var self = this
818 var pm = m.abs()
819 if (pm.t <= 0) return
820 var pt = self.abs()
821 if (pt.t < pm.t) {
822 if (q != null) q.fromInt(0)
823 if (r != null) self.copyTo(r)
824 return
825 }
826 if (r == null) r = new BigInteger()
827 var y = new BigInteger(),
828 ts = self.s,
829 ms = m.s
830 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
831 if (nsh > 0) {
832 pm.lShiftTo(nsh, y)
833 pt.lShiftTo(nsh, r)
834 } else {
835 pm.copyTo(y)
836 pt.copyTo(r)
837 }
838 var ys = y.t
839 var y0 = y[ys - 1]
840 if (y0 == 0) return
841 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
842 var d1 = self.FV / yt,
843 d2 = (1 << self.F1) / yt,
844 e = 1 << self.F2
845 var i = r.t,
846 j = i - ys,
847 t = (q == null) ? new BigInteger() : q
848 y.dlShiftTo(j, t)
849 if (r.compareTo(t) >= 0) {
850 r[r.t++] = 1
851 r.subTo(t, r)
852 }
853 BigInteger.ONE.dlShiftTo(ys, t)
854 t.subTo(y, y); // "negative" y so we can replace sub with am later
855 while (y.t < ys) y[y.t++] = 0
856 while (--j >= 0) {
857 // Estimate quotient digit
858 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
859 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
860 y.dlShiftTo(j, t)
861 r.subTo(t, r)
862 while (r[i] < --qd) r.subTo(t, r)
863 }
864 }
865 if (q != null) {
866 r.drShiftTo(ys, q)
867 if (ts != ms) BigInteger.ZERO.subTo(q, q)
868 }
869 r.t = ys
870 r.clamp()
871 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
872 if (ts < 0) BigInteger.ZERO.subTo(r, r)
873 }
874
875 // (public) this mod a
876 function bnMod(a) {
877 var r = new BigInteger()
878 this.abs()
879 .divRemTo(a, null, r)
880 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
881 return r
882 }
883
884 // Modular reduction using "classic" algorithm
885 function Classic(m) {
886 this.m = m
887 }
888
889 function cConvert(x) {
890 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
891 else return x
892 }
893
894 function cRevert(x) {
895 return x
896 }
897
898 function cReduce(x) {
899 x.divRemTo(this.m, null, x)
900 }
901
902 function cMulTo(x, y, r) {
903 x.multiplyTo(y, r)
904 this.reduce(r)
905 }
906
907 function cSqrTo(x, r) {
908 x.squareTo(r)
909 this.reduce(r)
910 }
911
912 Classic.prototype.convert = cConvert
913 Classic.prototype.revert = cRevert
914 Classic.prototype.reduce = cReduce
915 Classic.prototype.mulTo = cMulTo
916 Classic.prototype.sqrTo = cSqrTo
917
918 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
919 // justification:
920 // xy == 1 (mod m)
921 // xy = 1+km
922 // xy(2-xy) = (1+km)(1-km)
923 // x[y(2-xy)] = 1-k^2m^2
924 // x[y(2-xy)] == 1 (mod m^2)
925 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
926 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
927 // JS multiply "overflows" differently from C/C++, so care is needed here.
928 function bnpInvDigit() {
929 if (this.t < 1) return 0
930 var x = this[0]
931 if ((x & 1) == 0) return 0
932 var y = x & 3; // y == 1/x mod 2^2
933 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
934 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
935 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
936 // last step - calculate inverse mod DV directly
937 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
938 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
939 // we really want the negative inverse, and -DV < y < DV
940 return (y > 0) ? this.DV - y : -y
941 }
942
943 // Montgomery reduction
944 function Montgomery(m) {
945 this.m = m
946 this.mp = m.invDigit()
947 this.mpl = this.mp & 0x7fff
948 this.mph = this.mp >> 15
949 this.um = (1 << (m.DB - 15)) - 1
950 this.mt2 = 2 * m.t
951 }
952
953 // xR mod m
954 function montConvert(x) {
955 var r = new BigInteger()
956 x.abs()
957 .dlShiftTo(this.m.t, r)
958 r.divRemTo(this.m, null, r)
959 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
960 return r
961 }
962
963 // x/R mod m
964 function montRevert(x) {
965 var r = new BigInteger()
966 x.copyTo(r)
967 this.reduce(r)
968 return r
969 }
970
971 // x = x/R mod m (HAC 14.32)
972 function montReduce(x) {
973 while (x.t <= this.mt2) // pad x so am has enough room later
974 x[x.t++] = 0
975 for (var i = 0; i < this.m.t; ++i) {
976 // faster way of calculating u0 = x[i]*mp mod DV
977 var j = x[i] & 0x7fff
978 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
979 // use am to combine the multiply-shift-add into one call
980 j = i + this.m.t
981 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
982 // propagate carry
983 while (x[j] >= x.DV) {
984 x[j] -= x.DV
985 x[++j]++
986 }
987 }
988 x.clamp()
989 x.drShiftTo(this.m.t, x)
990 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
991 }
992
993 // r = "x^2/R mod m"; x != r
994 function montSqrTo(x, r) {
995 x.squareTo(r)
996 this.reduce(r)
997 }
998
999 // r = "xy/R mod m"; x,y != r
1000 function montMulTo(x, y, r) {
1001 x.multiplyTo(y, r)
1002 this.reduce(r)
1003 }
1004
1005 Montgomery.prototype.convert = montConvert
1006 Montgomery.prototype.revert = montRevert
1007 Montgomery.prototype.reduce = montReduce
1008 Montgomery.prototype.mulTo = montMulTo
1009 Montgomery.prototype.sqrTo = montSqrTo
1010
1011 // (protected) true iff this is even
1012 function bnpIsEven() {
1013 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1014 }
1015
1016 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1017 function bnpExp(e, z) {
1018 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1019 var r = new BigInteger(),
1020 r2 = new BigInteger(),
1021 g = z.convert(this),
1022 i = nbits(e) - 1
1023 g.copyTo(r)
1024 while (--i >= 0) {
1025 z.sqrTo(r, r2)
1026 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1027 else {
1028 var t = r
1029 r = r2
1030 r2 = t
1031 }
1032 }
1033 return z.revert(r)
1034 }
1035
1036 // (public) this^e % m, 0 <= e < 2^32
1037 function bnModPowInt(e, m) {
1038 var z
1039 if (e < 256 || m.isEven()) z = new Classic(m)
1040 else z = new Montgomery(m)
1041 return this.exp(e, z)
1042 }
1043
1044 // protected
1045 proto.copyTo = bnpCopyTo
1046 proto.fromInt = bnpFromInt
1047 proto.fromString = bnpFromString
1048 proto.clamp = bnpClamp
1049 proto.dlShiftTo = bnpDLShiftTo
1050 proto.drShiftTo = bnpDRShiftTo
1051 proto.lShiftTo = bnpLShiftTo
1052 proto.rShiftTo = bnpRShiftTo
1053 proto.subTo = bnpSubTo
1054 proto.multiplyTo = bnpMultiplyTo
1055 proto.squareTo = bnpSquareTo
1056 proto.divRemTo = bnpDivRemTo
1057 proto.invDigit = bnpInvDigit
1058 proto.isEven = bnpIsEven
1059 proto.exp = bnpExp
1060
1061 // public
1062 proto.toString = bnToString
1063 proto.negate = bnNegate
1064 proto.abs = bnAbs
1065 proto.compareTo = bnCompareTo
1066 proto.bitLength = bnBitLength
1067 proto.byteLength = bnByteLength
1068 proto.mod = bnMod
1069 proto.modPowInt = bnModPowInt
1070
1071 // (public)
1072 function bnClone() {
1073 var r = new BigInteger()
1074 this.copyTo(r)
1075 return r
1076 }
1077
1078 // (public) return value as integer
1079 function bnIntValue() {
1080 if (this.s < 0) {
1081 if (this.t == 1) return this[0] - this.DV
1082 else if (this.t == 0) return -1
1083 } else if (this.t == 1) return this[0]
1084 else if (this.t == 0) return 0
1085 // assumes 16 < DB < 32
1086 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1087 }
1088
1089 // (public) return value as byte
1090 function bnByteValue() {
1091 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1092 }
1093
1094 // (public) return value as short (assumes DB>=16)
1095 function bnShortValue() {
1096 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1097 }
1098
1099 // (protected) return x s.t. r^x < DV
1100 function bnpChunkSize(r) {
1101 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1102 }
1103
1104 // (public) 0 if this == 0, 1 if this > 0
1105 function bnSigNum() {
1106 if (this.s < 0) return -1
1107 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1108 else return 1
1109 }
1110
1111 // (protected) convert to radix string
1112 function bnpToRadix(b) {
1113 if (b == null) b = 10
1114 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1115 var cs = this.chunkSize(b)
1116 var a = Math.pow(b, cs)
1117 var d = nbv(a),
1118 y = new BigInteger(),
1119 z = new BigInteger(),
1120 r = ""
1121 this.divRemTo(d, y, z)
1122 while (y.signum() > 0) {
1123 r = (a + z.intValue())
1124 .toString(b)
1125 .substr(1) + r
1126 y.divRemTo(d, y, z)
1127 }
1128 return z.intValue()
1129 .toString(b) + r
1130 }
1131
1132 // (protected) convert from radix string
1133 function bnpFromRadix(s, b) {
1134 var self = this
1135 self.fromInt(0)
1136 if (b == null) b = 10
1137 var cs = self.chunkSize(b)
1138 var d = Math.pow(b, cs),
1139 mi = false,
1140 j = 0,
1141 w = 0
1142 for (var i = 0; i < s.length; ++i) {
1143 var x = intAt(s, i)
1144 if (x < 0) {
1145 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1146 continue
1147 }
1148 w = b * w + x
1149 if (++j >= cs) {
1150 self.dMultiply(d)
1151 self.dAddOffset(w, 0)
1152 j = 0
1153 w = 0
1154 }
1155 }
1156 if (j > 0) {
1157 self.dMultiply(Math.pow(b, j))
1158 self.dAddOffset(w, 0)
1159 }
1160 if (mi) BigInteger.ZERO.subTo(self, self)
1161 }
1162
1163 // (protected) alternate constructor
1164 function bnpFromNumber(a, b, c) {
1165 var self = this
1166 if ("number" == typeof b) {
1167 // new BigInteger(int,int,RNG)
1168 if (a < 2) self.fromInt(1)
1169 else {
1170 self.fromNumber(a, c)
1171 if (!self.testBit(a - 1)) // force MSB set
1172 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1173 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1174 while (!self.isProbablePrime(b)) {
1175 self.dAddOffset(2, 0)
1176 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1177 }
1178 }
1179 } else {
1180 // new BigInteger(int,RNG)
1181 var x = new Array(),
1182 t = a & 7
1183 x.length = (a >> 3) + 1
1184 b.nextBytes(x)
1185 if (t > 0) x[0] &= ((1 << t) - 1)
1186 else x[0] = 0
1187 self.fromString(x, 256)
1188 }
1189 }
1190
1191 // (public) convert to bigendian byte array
1192 function bnToByteArray() {
1193 var self = this
1194 var i = self.t,
1195 r = new Array()
1196 r[0] = self.s
1197 var p = self.DB - (i * self.DB) % 8,
1198 d, k = 0
1199 if (i-- > 0) {
1200 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1201 r[k++] = d | (self.s << (self.DB - p))
1202 while (i >= 0) {
1203 if (p < 8) {
1204 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1205 d |= self[--i] >> (p += self.DB - 8)
1206 } else {
1207 d = (self[i] >> (p -= 8)) & 0xff
1208 if (p <= 0) {
1209 p += self.DB
1210 --i
1211 }
1212 }
1213 if ((d & 0x80) != 0) d |= -256
1214 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1215 if (k > 0 || d != self.s) r[k++] = d
1216 }
1217 }
1218 return r
1219 }
1220
1221 function bnEquals(a) {
1222 return (this.compareTo(a) == 0)
1223 }
1224
1225 function bnMin(a) {
1226 return (this.compareTo(a) < 0) ? this : a
1227 }
1228
1229 function bnMax(a) {
1230 return (this.compareTo(a) > 0) ? this : a
1231 }
1232
1233 // (protected) r = this op a (bitwise)
1234 function bnpBitwiseTo(a, op, r) {
1235 var self = this
1236 var i, f, m = Math.min(a.t, self.t)
1237 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1238 if (a.t < self.t) {
1239 f = a.s & self.DM
1240 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1241 r.t = self.t
1242 } else {
1243 f = self.s & self.DM
1244 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1245 r.t = a.t
1246 }
1247 r.s = op(self.s, a.s)
1248 r.clamp()
1249 }
1250
1251 // (public) this & a
1252 function op_and(x, y) {
1253 return x & y
1254 }
1255
1256 function bnAnd(a) {
1257 var r = new BigInteger()
1258 this.bitwiseTo(a, op_and, r)
1259 return r
1260 }
1261
1262 // (public) this | a
1263 function op_or(x, y) {
1264 return x | y
1265 }
1266
1267 function bnOr(a) {
1268 var r = new BigInteger()
1269 this.bitwiseTo(a, op_or, r)
1270 return r
1271 }
1272
1273 // (public) this ^ a
1274 function op_xor(x, y) {
1275 return x ^ y
1276 }
1277
1278 function bnXor(a) {
1279 var r = new BigInteger()
1280 this.bitwiseTo(a, op_xor, r)
1281 return r
1282 }
1283
1284 // (public) this & ~a
1285 function op_andnot(x, y) {
1286 return x & ~y
1287 }
1288
1289 function bnAndNot(a) {
1290 var r = new BigInteger()
1291 this.bitwiseTo(a, op_andnot, r)
1292 return r
1293 }
1294
1295 // (public) ~this
1296 function bnNot() {
1297 var r = new BigInteger()
1298 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1299 r.t = this.t
1300 r.s = ~this.s
1301 return r
1302 }
1303
1304 // (public) this << n
1305 function bnShiftLeft(n) {
1306 var r = new BigInteger()
1307 if (n < 0) this.rShiftTo(-n, r)
1308 else this.lShiftTo(n, r)
1309 return r
1310 }
1311
1312 // (public) this >> n
1313 function bnShiftRight(n) {
1314 var r = new BigInteger()
1315 if (n < 0) this.lShiftTo(-n, r)
1316 else this.rShiftTo(n, r)
1317 return r
1318 }
1319
1320 // return index of lowest 1-bit in x, x < 2^31
1321 function lbit(x) {
1322 if (x == 0) return -1
1323 var r = 0
1324 if ((x & 0xffff) == 0) {
1325 x >>= 16
1326 r += 16
1327 }
1328 if ((x & 0xff) == 0) {
1329 x >>= 8
1330 r += 8
1331 }
1332 if ((x & 0xf) == 0) {
1333 x >>= 4
1334 r += 4
1335 }
1336 if ((x & 3) == 0) {
1337 x >>= 2
1338 r += 2
1339 }
1340 if ((x & 1) == 0)++r
1341 return r
1342 }
1343
1344 // (public) returns index of lowest 1-bit (or -1 if none)
1345 function bnGetLowestSetBit() {
1346 for (var i = 0; i < this.t; ++i)
1347 if (this[i] != 0) return i * this.DB + lbit(this[i])
1348 if (this.s < 0) return this.t * this.DB
1349 return -1
1350 }
1351
1352 // return number of 1 bits in x
1353 function cbit(x) {
1354 var r = 0
1355 while (x != 0) {
1356 x &= x - 1
1357 ++r
1358 }
1359 return r
1360 }
1361
1362 // (public) return number of set bits
1363 function bnBitCount() {
1364 var r = 0,
1365 x = this.s & this.DM
1366 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1367 return r
1368 }
1369
1370 // (public) true iff nth bit is set
1371 function bnTestBit(n) {
1372 var j = Math.floor(n / this.DB)
1373 if (j >= this.t) return (this.s != 0)
1374 return ((this[j] & (1 << (n % this.DB))) != 0)
1375 }
1376
1377 // (protected) this op (1<<n)
1378 function bnpChangeBit(n, op) {
1379 var r = BigInteger.ONE.shiftLeft(n)
1380 this.bitwiseTo(r, op, r)
1381 return r
1382 }
1383
1384 // (public) this | (1<<n)
1385 function bnSetBit(n) {
1386 return this.changeBit(n, op_or)
1387 }
1388
1389 // (public) this & ~(1<<n)
1390 function bnClearBit(n) {
1391 return this.changeBit(n, op_andnot)
1392 }
1393
1394 // (public) this ^ (1<<n)
1395 function bnFlipBit(n) {
1396 return this.changeBit(n, op_xor)
1397 }
1398
1399 // (protected) r = this + a
1400 function bnpAddTo(a, r) {
1401 var self = this
1402
1403 var i = 0,
1404 c = 0,
1405 m = Math.min(a.t, self.t)
1406 while (i < m) {
1407 c += self[i] + a[i]
1408 r[i++] = c & self.DM
1409 c >>= self.DB
1410 }
1411 if (a.t < self.t) {
1412 c += a.s
1413 while (i < self.t) {
1414 c += self[i]
1415 r[i++] = c & self.DM
1416 c >>= self.DB
1417 }
1418 c += self.s
1419 } else {
1420 c += self.s
1421 while (i < a.t) {
1422 c += a[i]
1423 r[i++] = c & self.DM
1424 c >>= self.DB
1425 }
1426 c += a.s
1427 }
1428 r.s = (c < 0) ? -1 : 0
1429 if (c > 0) r[i++] = c
1430 else if (c < -1) r[i++] = self.DV + c
1431 r.t = i
1432 r.clamp()
1433 }
1434
1435 // (public) this + a
1436 function bnAdd(a) {
1437 var r = new BigInteger()
1438 this.addTo(a, r)
1439 return r
1440 }
1441
1442 // (public) this - a
1443 function bnSubtract(a) {
1444 var r = new BigInteger()
1445 this.subTo(a, r)
1446 return r
1447 }
1448
1449 // (public) this * a
1450 function bnMultiply(a) {
1451 var r = new BigInteger()
1452 this.multiplyTo(a, r)
1453 return r
1454 }
1455
1456 // (public) this^2
1457 function bnSquare() {
1458 var r = new BigInteger()
1459 this.squareTo(r)
1460 return r
1461 }
1462
1463 // (public) this / a
1464 function bnDivide(a) {
1465 var r = new BigInteger()
1466 this.divRemTo(a, r, null)
1467 return r
1468 }
1469
1470 // (public) this % a
1471 function bnRemainder(a) {
1472 var r = new BigInteger()
1473 this.divRemTo(a, null, r)
1474 return r
1475 }
1476
1477 // (public) [this/a,this%a]
1478 function bnDivideAndRemainder(a) {
1479 var q = new BigInteger(),
1480 r = new BigInteger()
1481 this.divRemTo(a, q, r)
1482 return new Array(q, r)
1483 }
1484
1485 // (protected) this *= n, this >= 0, 1 < n < DV
1486 function bnpDMultiply(n) {
1487 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1488 ++this.t
1489 this.clamp()
1490 }
1491
1492 // (protected) this += n << w words, this >= 0
1493 function bnpDAddOffset(n, w) {
1494 if (n == 0) return
1495 while (this.t <= w) this[this.t++] = 0
1496 this[w] += n
1497 while (this[w] >= this.DV) {
1498 this[w] -= this.DV
1499 if (++w >= this.t) this[this.t++] = 0
1500 ++this[w]
1501 }
1502 }
1503
1504 // A "null" reducer
1505 function NullExp() {}
1506
1507 function nNop(x) {
1508 return x
1509 }
1510
1511 function nMulTo(x, y, r) {
1512 x.multiplyTo(y, r)
1513 }
1514
1515 function nSqrTo(x, r) {
1516 x.squareTo(r)
1517 }
1518
1519 NullExp.prototype.convert = nNop
1520 NullExp.prototype.revert = nNop
1521 NullExp.prototype.mulTo = nMulTo
1522 NullExp.prototype.sqrTo = nSqrTo
1523
1524 // (public) this^e
1525 function bnPow(e) {
1526 return this.exp(e, new NullExp())
1527 }
1528
1529 // (protected) r = lower n words of "this * a", a.t <= n
1530 // "this" should be the larger one if appropriate.
1531 function bnpMultiplyLowerTo(a, n, r) {
1532 var i = Math.min(this.t + a.t, n)
1533 r.s = 0; // assumes a,this >= 0
1534 r.t = i
1535 while (i > 0) r[--i] = 0
1536 var j
1537 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1538 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1539 r.clamp()
1540 }
1541
1542 // (protected) r = "this * a" without lower n words, n > 0
1543 // "this" should be the larger one if appropriate.
1544 function bnpMultiplyUpperTo(a, n, r) {
1545 --n
1546 var i = r.t = this.t + a.t - n
1547 r.s = 0; // assumes a,this >= 0
1548 while (--i >= 0) r[i] = 0
1549 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1550 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1551 r.clamp()
1552 r.drShiftTo(1, r)
1553 }
1554
1555 // Barrett modular reduction
1556 function Barrett(m) {
1557 // setup Barrett
1558 this.r2 = new BigInteger()
1559 this.q3 = new BigInteger()
1560 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1561 this.mu = this.r2.divide(m)
1562 this.m = m
1563 }
1564
1565 function barrettConvert(x) {
1566 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1567 else if (x.compareTo(this.m) < 0) return x
1568 else {
1569 var r = new BigInteger()
1570 x.copyTo(r)
1571 this.reduce(r)
1572 return r
1573 }
1574 }
1575
1576 function barrettRevert(x) {
1577 return x
1578 }
1579
1580 // x = x mod m (HAC 14.42)
1581 function barrettReduce(x) {
1582 var self = this
1583 x.drShiftTo(self.m.t - 1, self.r2)
1584 if (x.t > self.m.t + 1) {
1585 x.t = self.m.t + 1
1586 x.clamp()
1587 }
1588 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1589 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1590 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1591 x.subTo(self.r2, x)
1592 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1593 }
1594
1595 // r = x^2 mod m; x != r
1596 function barrettSqrTo(x, r) {
1597 x.squareTo(r)
1598 this.reduce(r)
1599 }
1600
1601 // r = x*y mod m; x,y != r
1602 function barrettMulTo(x, y, r) {
1603 x.multiplyTo(y, r)
1604 this.reduce(r)
1605 }
1606
1607 Barrett.prototype.convert = barrettConvert
1608 Barrett.prototype.revert = barrettRevert
1609 Barrett.prototype.reduce = barrettReduce
1610 Barrett.prototype.mulTo = barrettMulTo
1611 Barrett.prototype.sqrTo = barrettSqrTo
1612
1613 // (public) this^e % m (HAC 14.85)
1614 function bnModPow(e, m) {
1615 var i = e.bitLength(),
1616 k, r = nbv(1),
1617 z
1618 if (i <= 0) return r
1619 else if (i < 18) k = 1
1620 else if (i < 48) k = 3
1621 else if (i < 144) k = 4
1622 else if (i < 768) k = 5
1623 else k = 6
1624 if (i < 8)
1625 z = new Classic(m)
1626 else if (m.isEven())
1627 z = new Barrett(m)
1628 else
1629 z = new Montgomery(m)
1630
1631 // precomputation
1632 var g = new Array(),
1633 n = 3,
1634 k1 = k - 1,
1635 km = (1 << k) - 1
1636 g[1] = z.convert(this)
1637 if (k > 1) {
1638 var g2 = new BigInteger()
1639 z.sqrTo(g[1], g2)
1640 while (n <= km) {
1641 g[n] = new BigInteger()
1642 z.mulTo(g2, g[n - 2], g[n])
1643 n += 2
1644 }
1645 }
1646
1647 var j = e.t - 1,
1648 w, is1 = true,
1649 r2 = new BigInteger(),
1650 t
1651 i = nbits(e[j]) - 1
1652 while (j >= 0) {
1653 if (i >= k1) w = (e[j] >> (i - k1)) & km
1654 else {
1655 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1656 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1657 }
1658
1659 n = k
1660 while ((w & 1) == 0) {
1661 w >>= 1
1662 --n
1663 }
1664 if ((i -= n) < 0) {
1665 i += this.DB
1666 --j
1667 }
1668 if (is1) { // ret == 1, don't bother squaring or multiplying it
1669 g[w].copyTo(r)
1670 is1 = false
1671 } else {
1672 while (n > 1) {
1673 z.sqrTo(r, r2)
1674 z.sqrTo(r2, r)
1675 n -= 2
1676 }
1677 if (n > 0) z.sqrTo(r, r2)
1678 else {
1679 t = r
1680 r = r2
1681 r2 = t
1682 }
1683 z.mulTo(r2, g[w], r)
1684 }
1685
1686 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1687 z.sqrTo(r, r2)
1688 t = r
1689 r = r2
1690 r2 = t
1691 if (--i < 0) {
1692 i = this.DB - 1
1693 --j
1694 }
1695 }
1696 }
1697 return z.revert(r)
1698 }
1699
1700 // (public) gcd(this,a) (HAC 14.54)
1701 function bnGCD(a) {
1702 var x = (this.s < 0) ? this.negate() : this.clone()
1703 var y = (a.s < 0) ? a.negate() : a.clone()
1704 if (x.compareTo(y) < 0) {
1705 var t = x
1706 x = y
1707 y = t
1708 }
1709 var i = x.getLowestSetBit(),
1710 g = y.getLowestSetBit()
1711 if (g < 0) return x
1712 if (i < g) g = i
1713 if (g > 0) {
1714 x.rShiftTo(g, x)
1715 y.rShiftTo(g, y)
1716 }
1717 while (x.signum() > 0) {
1718 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1719 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1720 if (x.compareTo(y) >= 0) {
1721 x.subTo(y, x)
1722 x.rShiftTo(1, x)
1723 } else {
1724 y.subTo(x, y)
1725 y.rShiftTo(1, y)
1726 }
1727 }
1728 if (g > 0) y.lShiftTo(g, y)
1729 return y
1730 }
1731
1732 // (protected) this % n, n < 2^26
1733 function bnpModInt(n) {
1734 if (n <= 0) return 0
1735 var d = this.DV % n,
1736 r = (this.s < 0) ? n - 1 : 0
1737 if (this.t > 0)
1738 if (d == 0) r = this[0] % n
1739 else
1740 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1741 return r
1742 }
1743
1744 // (public) 1/this % m (HAC 14.61)
1745 function bnModInverse(m) {
1746 var ac = m.isEven()
1747 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1748 var u = m.clone(),
1749 v = this.clone()
1750 var a = nbv(1),
1751 b = nbv(0),
1752 c = nbv(0),
1753 d = nbv(1)
1754 while (u.signum() != 0) {
1755 while (u.isEven()) {
1756 u.rShiftTo(1, u)
1757 if (ac) {
1758 if (!a.isEven() || !b.isEven()) {
1759 a.addTo(this, a)
1760 b.subTo(m, b)
1761 }
1762 a.rShiftTo(1, a)
1763 } else if (!b.isEven()) b.subTo(m, b)
1764 b.rShiftTo(1, b)
1765 }
1766 while (v.isEven()) {
1767 v.rShiftTo(1, v)
1768 if (ac) {
1769 if (!c.isEven() || !d.isEven()) {
1770 c.addTo(this, c)
1771 d.subTo(m, d)
1772 }
1773 c.rShiftTo(1, c)
1774 } else if (!d.isEven()) d.subTo(m, d)
1775 d.rShiftTo(1, d)
1776 }
1777 if (u.compareTo(v) >= 0) {
1778 u.subTo(v, u)
1779 if (ac) a.subTo(c, a)
1780 b.subTo(d, b)
1781 } else {
1782 v.subTo(u, v)
1783 if (ac) c.subTo(a, c)
1784 d.subTo(b, d)
1785 }
1786 }
1787 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1788 if (d.compareTo(m) >= 0) return d.subtract(m)
1789 if (d.signum() < 0) d.addTo(m, d)
1790 else return d
1791 if (d.signum() < 0) return d.add(m)
1792 else return d
1793 }
1794
1795 var lowprimes = [
1796 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1797 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1798 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1799 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1800 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1801 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1802 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1803 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1804 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1805 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1806 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1807 ]
1808
1809 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1810
1811 // (public) test primality with certainty >= 1-.5^t
1812 function bnIsProbablePrime(t) {
1813 var i, x = this.abs()
1814 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1815 for (i = 0; i < lowprimes.length; ++i)
1816 if (x[0] == lowprimes[i]) return true
1817 return false
1818 }
1819 if (x.isEven()) return false
1820 i = 1
1821 while (i < lowprimes.length) {
1822 var m = lowprimes[i],
1823 j = i + 1
1824 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1825 m = x.modInt(m)
1826 while (i < j) if (m % lowprimes[i++] == 0) return false
1827 }
1828 return x.millerRabin(t)
1829 }
1830
1831 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1832 function bnpMillerRabin(t) {
1833 var n1 = this.subtract(BigInteger.ONE)
1834 var k = n1.getLowestSetBit()
1835 if (k <= 0) return false
1836 var r = n1.shiftRight(k)
1837 t = (t + 1) >> 1
1838 if (t > lowprimes.length) t = lowprimes.length
1839 var a = new BigInteger(null)
1840 var j, bases = []
1841 for (var i = 0; i < t; ++i) {
1842 for (;;) {
1843 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1844 if (bases.indexOf(j) == -1) break
1845 }
1846 bases.push(j)
1847 a.fromInt(j)
1848 var y = a.modPow(r, this)
1849 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1850 var j = 1
1851 while (j++ < k && y.compareTo(n1) != 0) {
1852 y = y.modPowInt(2, this)
1853 if (y.compareTo(BigInteger.ONE) == 0) return false
1854 }
1855 if (y.compareTo(n1) != 0) return false
1856 }
1857 }
1858 return true
1859 }
1860
1861 // protected
1862 proto.chunkSize = bnpChunkSize
1863 proto.toRadix = bnpToRadix
1864 proto.fromRadix = bnpFromRadix
1865 proto.fromNumber = bnpFromNumber
1866 proto.bitwiseTo = bnpBitwiseTo
1867 proto.changeBit = bnpChangeBit
1868 proto.addTo = bnpAddTo
1869 proto.dMultiply = bnpDMultiply
1870 proto.dAddOffset = bnpDAddOffset
1871 proto.multiplyLowerTo = bnpMultiplyLowerTo
1872 proto.multiplyUpperTo = bnpMultiplyUpperTo
1873 proto.modInt = bnpModInt
1874 proto.millerRabin = bnpMillerRabin
1875
1876 // public
1877 proto.clone = bnClone
1878 proto.intValue = bnIntValue
1879 proto.byteValue = bnByteValue
1880 proto.shortValue = bnShortValue
1881 proto.signum = bnSigNum
1882 proto.toByteArray = bnToByteArray
1883 proto.equals = bnEquals
1884 proto.min = bnMin
1885 proto.max = bnMax
1886 proto.and = bnAnd
1887 proto.or = bnOr
1888 proto.xor = bnXor
1889 proto.andNot = bnAndNot
1890 proto.not = bnNot
1891 proto.shiftLeft = bnShiftLeft
1892 proto.shiftRight = bnShiftRight
1893 proto.getLowestSetBit = bnGetLowestSetBit
1894 proto.bitCount = bnBitCount
1895 proto.testBit = bnTestBit
1896 proto.setBit = bnSetBit
1897 proto.clearBit = bnClearBit
1898 proto.flipBit = bnFlipBit
1899 proto.add = bnAdd
1900 proto.subtract = bnSubtract
1901 proto.multiply = bnMultiply
1902 proto.divide = bnDivide
1903 proto.remainder = bnRemainder
1904 proto.divideAndRemainder = bnDivideAndRemainder
1905 proto.modPow = bnModPow
1906 proto.modInverse = bnModInverse
1907 proto.pow = bnPow
1908 proto.gcd = bnGCD
1909 proto.isProbablePrime = bnIsProbablePrime
1910
1911 // JSBN-specific extension
1912 proto.square = bnSquare
1913
1914 // constants
1915 BigInteger.ZERO = nbv(0)
1916 BigInteger.ONE = nbv(1)
1917 BigInteger.valueOf = nbv
1918
1919 module.exports = BigInteger
1920
1921 },{"../package.json":4}],2:[function(require,module,exports){
1922 (function (Buffer){
1923 // FIXME: Kind of a weird way to throw exceptions, consider removing
1924 var assert = require('assert')
1925 var BigInteger = require('./bigi')
1926
1927 /**
1928 * Turns a byte array into a big integer.
1929 *
1930 * This function will interpret a byte array as a big integer in big
1931 * endian notation.
1932 */
1933 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1934 // BigInteger expects a DER integer conformant byte array
1935 if (byteArray[0] & 0x80) {
1936 return new BigInteger([0].concat(byteArray))
1937 }
1938
1939 return new BigInteger(byteArray)
1940 }
1941
1942 /**
1943 * Returns a byte array representation of the big integer.
1944 *
1945 * This returns the absolute of the contained value in big endian
1946 * form. A value of zero results in an empty array.
1947 */
1948 BigInteger.prototype.toByteArrayUnsigned = function() {
1949 var byteArray = this.toByteArray()
1950 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1951 }
1952
1953 BigInteger.fromDERInteger = function(byteArray) {
1954 return new BigInteger(byteArray)
1955 }
1956
1957 /*
1958 * Converts BigInteger to a DER integer representation.
1959 *
1960 * The format for this value uses the most significant bit as a sign
1961 * bit. If the most significant bit is already set and the integer is
1962 * positive, a 0x00 is prepended.
1963 *
1964 * Examples:
1965 *
1966 * 0 => 0x00
1967 * 1 => 0x01
1968 * -1 => 0xff
1969 * 127 => 0x7f
1970 * -127 => 0x81
1971 * 128 => 0x0080
1972 * -128 => 0x80
1973 * 255 => 0x00ff
1974 * -255 => 0xff01
1975 * 16300 => 0x3fac
1976 * -16300 => 0xc054
1977 * 62300 => 0x00f35c
1978 * -62300 => 0xff0ca4
1979 */
1980 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1981
1982 BigInteger.fromBuffer = function(buffer) {
1983 // BigInteger expects a DER integer conformant byte array
1984 if (buffer[0] & 0x80) {
1985 var byteArray = Array.prototype.slice.call(buffer)
1986
1987 return new BigInteger([0].concat(byteArray))
1988 }
1989
1990 return new BigInteger(buffer)
1991 }
1992
1993 BigInteger.fromHex = function(hex) {
1994 if (hex === '') return BigInteger.ZERO
1995
1996 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1997 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1998 return new BigInteger(hex, 16)
1999 }
2000
2001 BigInteger.prototype.toBuffer = function(size) {
2002 var byteArray = this.toByteArrayUnsigned()
2003 var zeros = []
2004
2005 var padding = size - byteArray.length
2006 while (zeros.length < padding) zeros.push(0)
2007
2008 return new Buffer(zeros.concat(byteArray))
2009 }
2010
2011 BigInteger.prototype.toHex = function(size) {
2012 return this.toBuffer(size).toString('hex')
2013 }
2014
2015 }).call(this,require("buffer").Buffer)
2016 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2017 var BigInteger = require('./bigi')
2018
2019 //addons
2020 require('./convert')
2021
2022 module.exports = BigInteger
2023 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2024 module.exports={
2025 "name": "bigi",
2026 "version": "1.4.0",
2027 "description": "Big integers.",
2028 "keywords": [
2029 "cryptography",
2030 "math",
2031 "bitcoin",
2032 "arbitrary",
2033 "precision",
2034 "arithmetic",
2035 "big",
2036 "integer",
2037 "int",
2038 "number",
2039 "biginteger",
2040 "bigint",
2041 "bignumber",
2042 "decimal",
2043 "float"
2044 ],
2045 "devDependencies": {
2046 "mocha": "^1.20.1",
2047 "jshint": "^2.5.1",
2048 "coveralls": "^2.10.0",
2049 "istanbul": "^0.2.11"
2050 },
2051 "repository": {
2052 "url": "https://github.com/cryptocoinjs/bigi",
2053 "type": "git"
2054 },
2055 "main": "./lib/index.js",
2056 "scripts": {
2057 "test": "_mocha -- test/*.js",
2058 "jshint": "jshint --config jshint.json lib/*.js ; true",
2059 "unit": "mocha",
2060 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2061 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2062 },
2063 "dependencies": {},
2064 "testling": {
2065 "files": "test/*.js",
2066 "harness": "mocha",
2067 "browsers": [
2068 "ie/9..latest",
2069 "firefox/latest",
2070 "chrome/latest",
2071 "safari/6.0..latest",
2072 "iphone/6.0..latest",
2073 "android-browser/4.2..latest"
2074 ]
2075 },
2076 "bugs": {
2077 "url": "https://github.com/cryptocoinjs/bigi/issues"
2078 },
2079 "homepage": "https://github.com/cryptocoinjs/bigi",
2080 "_id": "bigi@1.4.0",
2081 "dist": {
2082 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2083 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2084 },
2085 "_from": "bigi@^1.4.0",
2086 "_npmVersion": "1.4.3",
2087 "_npmUser": {
2088 "name": "jp",
2089 "email": "jprichardson@gmail.com"
2090 },
2091 "maintainers": [
2092 {
2093 "name": "jp",
2094 "email": "jprichardson@gmail.com"
2095 },
2096 {
2097 "name": "midnightlightning",
2098 "email": "boydb@midnightdesign.ws"
2099 },
2100 {
2101 "name": "sidazhang",
2102 "email": "sidazhang89@gmail.com"
2103 },
2104 {
2105 "name": "nadav",
2106 "email": "npm@shesek.info"
2107 }
2108 ],
2109 "directories": {},
2110 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2111 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2112 }
2113
2114 },{}],5:[function(require,module,exports){
2115 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2116 //
2117 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2118 //
2119 // Originally from narwhal.js (http://narwhaljs.org)
2120 // Copyright (c) 2009 Thomas Robinson <280north.com>
2121 //
2122 // Permission is hereby granted, free of charge, to any person obtaining a copy
2123 // of this software and associated documentation files (the 'Software'), to
2124 // deal in the Software without restriction, including without limitation the
2125 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2126 // sell copies of the Software, and to permit persons to whom the Software is
2127 // furnished to do so, subject to the following conditions:
2128 //
2129 // The above copyright notice and this permission notice shall be included in
2130 // all copies or substantial portions of the Software.
2131 //
2132 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2133 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2134 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2135 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2136 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2137 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2138
2139 // when used in node, this will actually load the util module we depend on
2140 // versus loading the builtin util module as happens otherwise
2141 // this is a bug in node module loading as far as I am concerned
2142 var util = require('util/');
2143
2144 var pSlice = Array.prototype.slice;
2145 var hasOwn = Object.prototype.hasOwnProperty;
2146
2147 // 1. The assert module provides functions that throw
2148 // AssertionError's when particular conditions are not met. The
2149 // assert module must conform to the following interface.
2150
2151 var assert = module.exports = ok;
2152
2153 // 2. The AssertionError is defined in assert.
2154 // new assert.AssertionError({ message: message,
2155 // actual: actual,
2156 // expected: expected })
2157
2158 assert.AssertionError = function AssertionError(options) {
2159 this.name = 'AssertionError';
2160 this.actual = options.actual;
2161 this.expected = options.expected;
2162 this.operator = options.operator;
2163 if (options.message) {
2164 this.message = options.message;
2165 this.generatedMessage = false;
2166 } else {
2167 this.message = getMessage(this);
2168 this.generatedMessage = true;
2169 }
2170 var stackStartFunction = options.stackStartFunction || fail;
2171
2172 if (Error.captureStackTrace) {
2173 Error.captureStackTrace(this, stackStartFunction);
2174 }
2175 else {
2176 // non v8 browsers so we can have a stacktrace
2177 var err = new Error();
2178 if (err.stack) {
2179 var out = err.stack;
2180
2181 // try to strip useless frames
2182 var fn_name = stackStartFunction.name;
2183 var idx = out.indexOf('\n' + fn_name);
2184 if (idx >= 0) {
2185 // once we have located the function frame
2186 // we need to strip out everything before it (and its line)
2187 var next_line = out.indexOf('\n', idx + 1);
2188 out = out.substring(next_line + 1);
2189 }
2190
2191 this.stack = out;
2192 }
2193 }
2194 };
2195
2196 // assert.AssertionError instanceof Error
2197 util.inherits(assert.AssertionError, Error);
2198
2199 function replacer(key, value) {
2200 if (util.isUndefined(value)) {
2201 return '' + value;
2202 }
2203 if (util.isNumber(value) && !isFinite(value)) {
2204 return value.toString();
2205 }
2206 if (util.isFunction(value) || util.isRegExp(value)) {
2207 return value.toString();
2208 }
2209 return value;
2210 }
2211
2212 function truncate(s, n) {
2213 if (util.isString(s)) {
2214 return s.length < n ? s : s.slice(0, n);
2215 } else {
2216 return s;
2217 }
2218 }
2219
2220 function getMessage(self) {
2221 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2222 self.operator + ' ' +
2223 truncate(JSON.stringify(self.expected, replacer), 128);
2224 }
2225
2226 // At present only the three keys mentioned above are used and
2227 // understood by the spec. Implementations or sub modules can pass
2228 // other keys to the AssertionError's constructor - they will be
2229 // ignored.
2230
2231 // 3. All of the following functions must throw an AssertionError
2232 // when a corresponding condition is not met, with a message that
2233 // may be undefined if not provided. All assertion methods provide
2234 // both the actual and expected values to the assertion error for
2235 // display purposes.
2236
2237 function fail(actual, expected, message, operator, stackStartFunction) {
2238 throw new assert.AssertionError({
2239 message: message,
2240 actual: actual,
2241 expected: expected,
2242 operator: operator,
2243 stackStartFunction: stackStartFunction
2244 });
2245 }
2246
2247 // EXTENSION! allows for well behaved errors defined elsewhere.
2248 assert.fail = fail;
2249
2250 // 4. Pure assertion tests whether a value is truthy, as determined
2251 // by !!guard.
2252 // assert.ok(guard, message_opt);
2253 // This statement is equivalent to assert.equal(true, !!guard,
2254 // message_opt);. To test strictly for the value true, use
2255 // assert.strictEqual(true, guard, message_opt);.
2256
2257 function ok(value, message) {
2258 if (!value) fail(value, true, message, '==', assert.ok);
2259 }
2260 assert.ok = ok;
2261
2262 // 5. The equality assertion tests shallow, coercive equality with
2263 // ==.
2264 // assert.equal(actual, expected, message_opt);
2265
2266 assert.equal = function equal(actual, expected, message) {
2267 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2268 };
2269
2270 // 6. The non-equality assertion tests for whether two objects are not equal
2271 // with != assert.notEqual(actual, expected, message_opt);
2272
2273 assert.notEqual = function notEqual(actual, expected, message) {
2274 if (actual == expected) {
2275 fail(actual, expected, message, '!=', assert.notEqual);
2276 }
2277 };
2278
2279 // 7. The equivalence assertion tests a deep equality relation.
2280 // assert.deepEqual(actual, expected, message_opt);
2281
2282 assert.deepEqual = function deepEqual(actual, expected, message) {
2283 if (!_deepEqual(actual, expected)) {
2284 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2285 }
2286 };
2287
2288 function _deepEqual(actual, expected) {
2289 // 7.1. All identical values are equivalent, as determined by ===.
2290 if (actual === expected) {
2291 return true;
2292
2293 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2294 if (actual.length != expected.length) return false;
2295
2296 for (var i = 0; i < actual.length; i++) {
2297 if (actual[i] !== expected[i]) return false;
2298 }
2299
2300 return true;
2301
2302 // 7.2. If the expected value is a Date object, the actual value is
2303 // equivalent if it is also a Date object that refers to the same time.
2304 } else if (util.isDate(actual) && util.isDate(expected)) {
2305 return actual.getTime() === expected.getTime();
2306
2307 // 7.3 If the expected value is a RegExp object, the actual value is
2308 // equivalent if it is also a RegExp object with the same source and
2309 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2310 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2311 return actual.source === expected.source &&
2312 actual.global === expected.global &&
2313 actual.multiline === expected.multiline &&
2314 actual.lastIndex === expected.lastIndex &&
2315 actual.ignoreCase === expected.ignoreCase;
2316
2317 // 7.4. Other pairs that do not both pass typeof value == 'object',
2318 // equivalence is determined by ==.
2319 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2320 return actual == expected;
2321
2322 // 7.5 For all other Object pairs, including Array objects, equivalence is
2323 // determined by having the same number of owned properties (as verified
2324 // with Object.prototype.hasOwnProperty.call), the same set of keys
2325 // (although not necessarily the same order), equivalent values for every
2326 // corresponding key, and an identical 'prototype' property. Note: this
2327 // accounts for both named and indexed properties on Arrays.
2328 } else {
2329 return objEquiv(actual, expected);
2330 }
2331 }
2332
2333 function isArguments(object) {
2334 return Object.prototype.toString.call(object) == '[object Arguments]';
2335 }
2336
2337 function objEquiv(a, b) {
2338 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2339 return false;
2340 // an identical 'prototype' property.
2341 if (a.prototype !== b.prototype) return false;
2342 // if one is a primitive, the other must be same
2343 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2344 return a === b;
2345 }
2346 var aIsArgs = isArguments(a),
2347 bIsArgs = isArguments(b);
2348 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2349 return false;
2350 if (aIsArgs) {
2351 a = pSlice.call(a);
2352 b = pSlice.call(b);
2353 return _deepEqual(a, b);
2354 }
2355 var ka = objectKeys(a),
2356 kb = objectKeys(b),
2357 key, i;
2358 // having the same number of owned properties (keys incorporates
2359 // hasOwnProperty)
2360 if (ka.length != kb.length)
2361 return false;
2362 //the same set of keys (although not necessarily the same order),
2363 ka.sort();
2364 kb.sort();
2365 //~~~cheap key test
2366 for (i = ka.length - 1; i >= 0; i--) {
2367 if (ka[i] != kb[i])
2368 return false;
2369 }
2370 //equivalent values for every corresponding key, and
2371 //~~~possibly expensive deep test
2372 for (i = ka.length - 1; i >= 0; i--) {
2373 key = ka[i];
2374 if (!_deepEqual(a[key], b[key])) return false;
2375 }
2376 return true;
2377 }
2378
2379 // 8. The non-equivalence assertion tests for any deep inequality.
2380 // assert.notDeepEqual(actual, expected, message_opt);
2381
2382 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2383 if (_deepEqual(actual, expected)) {
2384 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2385 }
2386 };
2387
2388 // 9. The strict equality assertion tests strict equality, as determined by ===.
2389 // assert.strictEqual(actual, expected, message_opt);
2390
2391 assert.strictEqual = function strictEqual(actual, expected, message) {
2392 if (actual !== expected) {
2393 fail(actual, expected, message, '===', assert.strictEqual);
2394 }
2395 };
2396
2397 // 10. The strict non-equality assertion tests for strict inequality, as
2398 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2399
2400 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2401 if (actual === expected) {
2402 fail(actual, expected, message, '!==', assert.notStrictEqual);
2403 }
2404 };
2405
2406 function expectedException(actual, expected) {
2407 if (!actual || !expected) {
2408 return false;
2409 }
2410
2411 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2412 return expected.test(actual);
2413 } else if (actual instanceof expected) {
2414 return true;
2415 } else if (expected.call({}, actual) === true) {
2416 return true;
2417 }
2418
2419 return false;
2420 }
2421
2422 function _throws(shouldThrow, block, expected, message) {
2423 var actual;
2424
2425 if (util.isString(expected)) {
2426 message = expected;
2427 expected = null;
2428 }
2429
2430 try {
2431 block();
2432 } catch (e) {
2433 actual = e;
2434 }
2435
2436 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2437 (message ? ' ' + message : '.');
2438
2439 if (shouldThrow && !actual) {
2440 fail(actual, expected, 'Missing expected exception' + message);
2441 }
2442
2443 if (!shouldThrow && expectedException(actual, expected)) {
2444 fail(actual, expected, 'Got unwanted exception' + message);
2445 }
2446
2447 if ((shouldThrow && actual && expected &&
2448 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2449 throw actual;
2450 }
2451 }
2452
2453 // 11. Expected to throw an error:
2454 // assert.throws(block, Error_opt, message_opt);
2455
2456 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2457 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2458 };
2459
2460 // EXTENSION! This is annoying to write outside this module.
2461 assert.doesNotThrow = function(block, /*optional*/message) {
2462 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2463 };
2464
2465 assert.ifError = function(err) { if (err) {throw err;}};
2466
2467 var objectKeys = Object.keys || function (obj) {
2468 var keys = [];
2469 for (var key in obj) {
2470 if (hasOwn.call(obj, key)) keys.push(key);
2471 }
2472 return keys;
2473 };
2474
2475 },{"util/":29}],6:[function(require,module,exports){
2476
2477 },{}],7:[function(require,module,exports){
2478 /*!
2479 * The buffer module from node.js, for the browser.
2480 *
2481 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2482 * @license MIT
2483 */
2484
2485 var base64 = require('base64-js')
2486 var ieee754 = require('ieee754')
2487 var isArray = require('is-array')
2488
2489 exports.Buffer = Buffer
2490 exports.SlowBuffer = SlowBuffer
2491 exports.INSPECT_MAX_BYTES = 50
2492 Buffer.poolSize = 8192 // not used by this implementation
2493
2494 var rootParent = {}
2495
2496 /**
2497 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2498 * === true Use Uint8Array implementation (fastest)
2499 * === false Use Object implementation (most compatible, even IE6)
2500 *
2501 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2502 * Opera 11.6+, iOS 4.2+.
2503 *
2504 * Due to various browser bugs, sometimes the Object implementation will be used even
2505 * when the browser supports typed arrays.
2506 *
2507 * Note:
2508 *
2509 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2510 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2511 *
2512 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2513 * on objects.
2514 *
2515 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2516 *
2517 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2518 * incorrect length in some situations.
2519
2520 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2521 * get the Object implementation, which is slower but behaves correctly.
2522 */
2523 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2524 function Bar () {}
2525 try {
2526 var arr = new Uint8Array(1)
2527 arr.foo = function () { return 42 }
2528 arr.constructor = Bar
2529 return arr.foo() === 42 && // typed array instances can be augmented
2530 arr.constructor === Bar && // constructor can be set
2531 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2532 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2533 } catch (e) {
2534 return false
2535 }
2536 })()
2537
2538 function kMaxLength () {
2539 return Buffer.TYPED_ARRAY_SUPPORT
2540 ? 0x7fffffff
2541 : 0x3fffffff
2542 }
2543
2544 /**
2545 * Class: Buffer
2546 * =============
2547 *
2548 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2549 * with function properties for all the node `Buffer` API functions. We use
2550 * `Uint8Array` so that square bracket notation works as expected -- it returns
2551 * a single octet.
2552 *
2553 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2554 * prototype.
2555 */
2556 function Buffer (arg) {
2557 if (!(this instanceof Buffer)) {
2558 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2559 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2560 return new Buffer(arg)
2561 }
2562
2563 this.length = 0
2564 this.parent = undefined
2565
2566 // Common case.
2567 if (typeof arg === 'number') {
2568 return fromNumber(this, arg)
2569 }
2570
2571 // Slightly less common case.
2572 if (typeof arg === 'string') {
2573 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2574 }
2575
2576 // Unusual.
2577 return fromObject(this, arg)
2578 }
2579
2580 function fromNumber (that, length) {
2581 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2582 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2583 for (var i = 0; i < length; i++) {
2584 that[i] = 0
2585 }
2586 }
2587 return that
2588 }
2589
2590 function fromString (that, string, encoding) {
2591 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2592
2593 // Assumption: byteLength() return value is always < kMaxLength.
2594 var length = byteLength(string, encoding) | 0
2595 that = allocate(that, length)
2596
2597 that.write(string, encoding)
2598 return that
2599 }
2600
2601 function fromObject (that, object) {
2602 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2603
2604 if (isArray(object)) return fromArray(that, object)
2605
2606 if (object == null) {
2607 throw new TypeError('must start with number, buffer, array or string')
2608 }
2609
2610 if (typeof ArrayBuffer !== 'undefined') {
2611 if (object.buffer instanceof ArrayBuffer) {
2612 return fromTypedArray(that, object)
2613 }
2614 if (object instanceof ArrayBuffer) {
2615 return fromArrayBuffer(that, object)
2616 }
2617 }
2618
2619 if (object.length) return fromArrayLike(that, object)
2620
2621 return fromJsonObject(that, object)
2622 }
2623
2624 function fromBuffer (that, buffer) {
2625 var length = checked(buffer.length) | 0
2626 that = allocate(that, length)
2627 buffer.copy(that, 0, 0, length)
2628 return that
2629 }
2630
2631 function fromArray (that, array) {
2632 var length = checked(array.length) | 0
2633 that = allocate(that, length)
2634 for (var i = 0; i < length; i += 1) {
2635 that[i] = array[i] & 255
2636 }
2637 return that
2638 }
2639
2640 // Duplicate of fromArray() to keep fromArray() monomorphic.
2641 function fromTypedArray (that, array) {
2642 var length = checked(array.length) | 0
2643 that = allocate(that, length)
2644 // Truncating the elements is probably not what people expect from typed
2645 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2646 // of the old Buffer constructor.
2647 for (var i = 0; i < length; i += 1) {
2648 that[i] = array[i] & 255
2649 }
2650 return that
2651 }
2652
2653 function fromArrayBuffer (that, array) {
2654 if (Buffer.TYPED_ARRAY_SUPPORT) {
2655 // Return an augmented `Uint8Array` instance, for best performance
2656 array.byteLength
2657 that = Buffer._augment(new Uint8Array(array))
2658 } else {
2659 // Fallback: Return an object instance of the Buffer class
2660 that = fromTypedArray(that, new Uint8Array(array))
2661 }
2662 return that
2663 }
2664
2665 function fromArrayLike (that, array) {
2666 var length = checked(array.length) | 0
2667 that = allocate(that, length)
2668 for (var i = 0; i < length; i += 1) {
2669 that[i] = array[i] & 255
2670 }
2671 return that
2672 }
2673
2674 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2675 // Returns a zero-length buffer for inputs that don't conform to the spec.
2676 function fromJsonObject (that, object) {
2677 var array
2678 var length = 0
2679
2680 if (object.type === 'Buffer' && isArray(object.data)) {
2681 array = object.data
2682 length = checked(array.length) | 0
2683 }
2684 that = allocate(that, length)
2685
2686 for (var i = 0; i < length; i += 1) {
2687 that[i] = array[i] & 255
2688 }
2689 return that
2690 }
2691
2692 function allocate (that, length) {
2693 if (Buffer.TYPED_ARRAY_SUPPORT) {
2694 // Return an augmented `Uint8Array` instance, for best performance
2695 that = Buffer._augment(new Uint8Array(length))
2696 } else {
2697 // Fallback: Return an object instance of the Buffer class
2698 that.length = length
2699 that._isBuffer = true
2700 }
2701
2702 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2703 if (fromPool) that.parent = rootParent
2704
2705 return that
2706 }
2707
2708 function checked (length) {
2709 // Note: cannot use `length < kMaxLength` here because that fails when
2710 // length is NaN (which is otherwise coerced to zero.)
2711 if (length >= kMaxLength()) {
2712 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2713 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2714 }
2715 return length | 0
2716 }
2717
2718 function SlowBuffer (subject, encoding) {
2719 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2720
2721 var buf = new Buffer(subject, encoding)
2722 delete buf.parent
2723 return buf
2724 }
2725
2726 Buffer.isBuffer = function isBuffer (b) {
2727 return !!(b != null && b._isBuffer)
2728 }
2729
2730 Buffer.compare = function compare (a, b) {
2731 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2732 throw new TypeError('Arguments must be Buffers')
2733 }
2734
2735 if (a === b) return 0
2736
2737 var x = a.length
2738 var y = b.length
2739
2740 var i = 0
2741 var len = Math.min(x, y)
2742 while (i < len) {
2743 if (a[i] !== b[i]) break
2744
2745 ++i
2746 }
2747
2748 if (i !== len) {
2749 x = a[i]
2750 y = b[i]
2751 }
2752
2753 if (x < y) return -1
2754 if (y < x) return 1
2755 return 0
2756 }
2757
2758 Buffer.isEncoding = function isEncoding (encoding) {
2759 switch (String(encoding).toLowerCase()) {
2760 case 'hex':
2761 case 'utf8':
2762 case 'utf-8':
2763 case 'ascii':
2764 case 'binary':
2765 case 'base64':
2766 case 'raw':
2767 case 'ucs2':
2768 case 'ucs-2':
2769 case 'utf16le':
2770 case 'utf-16le':
2771 return true
2772 default:
2773 return false
2774 }
2775 }
2776
2777 Buffer.concat = function concat (list, length) {
2778 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2779
2780 if (list.length === 0) {
2781 return new Buffer(0)
2782 }
2783
2784 var i
2785 if (length === undefined) {
2786 length = 0
2787 for (i = 0; i < list.length; i++) {
2788 length += list[i].length
2789 }
2790 }
2791
2792 var buf = new Buffer(length)
2793 var pos = 0
2794 for (i = 0; i < list.length; i++) {
2795 var item = list[i]
2796 item.copy(buf, pos)
2797 pos += item.length
2798 }
2799 return buf
2800 }
2801
2802 function byteLength (string, encoding) {
2803 if (typeof string !== 'string') string = '' + string
2804
2805 var len = string.length
2806 if (len === 0) return 0
2807
2808 // Use a for loop to avoid recursion
2809 var loweredCase = false
2810 for (;;) {
2811 switch (encoding) {
2812 case 'ascii':
2813 case 'binary':
2814 // Deprecated
2815 case 'raw':
2816 case 'raws':
2817 return len
2818 case 'utf8':
2819 case 'utf-8':
2820 return utf8ToBytes(string).length
2821 case 'ucs2':
2822 case 'ucs-2':
2823 case 'utf16le':
2824 case 'utf-16le':
2825 return len * 2
2826 case 'hex':
2827 return len >>> 1
2828 case 'base64':
2829 return base64ToBytes(string).length
2830 default:
2831 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2832 encoding = ('' + encoding).toLowerCase()
2833 loweredCase = true
2834 }
2835 }
2836 }
2837 Buffer.byteLength = byteLength
2838
2839 // pre-set for values that may exist in the future
2840 Buffer.prototype.length = undefined
2841 Buffer.prototype.parent = undefined
2842
2843 function slowToString (encoding, start, end) {
2844 var loweredCase = false
2845
2846 start = start | 0
2847 end = end === undefined || end === Infinity ? this.length : end | 0
2848
2849 if (!encoding) encoding = 'utf8'
2850 if (start < 0) start = 0
2851 if (end > this.length) end = this.length
2852 if (end <= start) return ''
2853
2854 while (true) {
2855 switch (encoding) {
2856 case 'hex':
2857 return hexSlice(this, start, end)
2858
2859 case 'utf8':
2860 case 'utf-8':
2861 return utf8Slice(this, start, end)
2862
2863 case 'ascii':
2864 return asciiSlice(this, start, end)
2865
2866 case 'binary':
2867 return binarySlice(this, start, end)
2868
2869 case 'base64':
2870 return base64Slice(this, start, end)
2871
2872 case 'ucs2':
2873 case 'ucs-2':
2874 case 'utf16le':
2875 case 'utf-16le':
2876 return utf16leSlice(this, start, end)
2877
2878 default:
2879 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2880 encoding = (encoding + '').toLowerCase()
2881 loweredCase = true
2882 }
2883 }
2884 }
2885
2886 Buffer.prototype.toString = function toString () {
2887 var length = this.length | 0
2888 if (length === 0) return ''
2889 if (arguments.length === 0) return utf8Slice(this, 0, length)
2890 return slowToString.apply(this, arguments)
2891 }
2892
2893 Buffer.prototype.equals = function equals (b) {
2894 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2895 if (this === b) return true
2896 return Buffer.compare(this, b) === 0
2897 }
2898
2899 Buffer.prototype.inspect = function inspect () {
2900 var str = ''
2901 var max = exports.INSPECT_MAX_BYTES
2902 if (this.length > 0) {
2903 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2904 if (this.length > max) str += ' ... '
2905 }
2906 return '<Buffer ' + str + '>'
2907 }
2908
2909 Buffer.prototype.compare = function compare (b) {
2910 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2911 if (this === b) return 0
2912 return Buffer.compare(this, b)
2913 }
2914
2915 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2916 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2917 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2918 byteOffset >>= 0
2919
2920 if (this.length === 0) return -1
2921 if (byteOffset >= this.length) return -1
2922
2923 // Negative offsets start from the end of the buffer
2924 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
2925
2926 if (typeof val === 'string') {
2927 if (val.length === 0) return -1 // special case: looking for empty string always fails
2928 return String.prototype.indexOf.call(this, val, byteOffset)
2929 }
2930 if (Buffer.isBuffer(val)) {
2931 return arrayIndexOf(this, val, byteOffset)
2932 }
2933 if (typeof val === 'number') {
2934 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2935 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2936 }
2937 return arrayIndexOf(this, [ val ], byteOffset)
2938 }
2939
2940 function arrayIndexOf (arr, val, byteOffset) {
2941 var foundIndex = -1
2942 for (var i = 0; byteOffset + i < arr.length; i++) {
2943 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2944 if (foundIndex === -1) foundIndex = i
2945 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
2946 } else {
2947 foundIndex = -1
2948 }
2949 }
2950 return -1
2951 }
2952
2953 throw new TypeError('val must be string, number or Buffer')
2954 }
2955
2956 // `get` is deprecated
2957 Buffer.prototype.get = function get (offset) {
2958 console.log('.get() is deprecated. Access using array indexes instead.')
2959 return this.readUInt8(offset)
2960 }
2961
2962 // `set` is deprecated
2963 Buffer.prototype.set = function set (v, offset) {
2964 console.log('.set() is deprecated. Access using array indexes instead.')
2965 return this.writeUInt8(v, offset)
2966 }
2967
2968 function hexWrite (buf, string, offset, length) {
2969 offset = Number(offset) || 0
2970 var remaining = buf.length - offset
2971 if (!length) {
2972 length = remaining
2973 } else {
2974 length = Number(length)
2975 if (length > remaining) {
2976 length = remaining
2977 }
2978 }
2979
2980 // must be an even number of digits
2981 var strLen = string.length
2982 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
2983
2984 if (length > strLen / 2) {
2985 length = strLen / 2
2986 }
2987 for (var i = 0; i < length; i++) {
2988 var parsed = parseInt(string.substr(i * 2, 2), 16)
2989 if (isNaN(parsed)) throw new Error('Invalid hex string')
2990 buf[offset + i] = parsed
2991 }
2992 return i
2993 }
2994
2995 function utf8Write (buf, string, offset, length) {
2996 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2997 }
2998
2999 function asciiWrite (buf, string, offset, length) {
3000 return blitBuffer(asciiToBytes(string), buf, offset, length)
3001 }
3002
3003 function binaryWrite (buf, string, offset, length) {
3004 return asciiWrite(buf, string, offset, length)
3005 }
3006
3007 function base64Write (buf, string, offset, length) {
3008 return blitBuffer(base64ToBytes(string), buf, offset, length)
3009 }
3010
3011 function ucs2Write (buf, string, offset, length) {
3012 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3013 }
3014
3015 Buffer.prototype.write = function write (string, offset, length, encoding) {
3016 // Buffer#write(string)
3017 if (offset === undefined) {
3018 encoding = 'utf8'
3019 length = this.length
3020 offset = 0
3021 // Buffer#write(string, encoding)
3022 } else if (length === undefined && typeof offset === 'string') {
3023 encoding = offset
3024 length = this.length
3025 offset = 0
3026 // Buffer#write(string, offset[, length][, encoding])
3027 } else if (isFinite(offset)) {
3028 offset = offset | 0
3029 if (isFinite(length)) {
3030 length = length | 0
3031 if (encoding === undefined) encoding = 'utf8'
3032 } else {
3033 encoding = length
3034 length = undefined
3035 }
3036 // legacy write(string, encoding, offset, length) - remove in v0.13
3037 } else {
3038 var swap = encoding
3039 encoding = offset
3040 offset = length | 0
3041 length = swap
3042 }
3043
3044 var remaining = this.length - offset
3045 if (length === undefined || length > remaining) length = remaining
3046
3047 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3048 throw new RangeError('attempt to write outside buffer bounds')
3049 }
3050
3051 if (!encoding) encoding = 'utf8'
3052
3053 var loweredCase = false
3054 for (;;) {
3055 switch (encoding) {
3056 case 'hex':
3057 return hexWrite(this, string, offset, length)
3058
3059 case 'utf8':
3060 case 'utf-8':
3061 return utf8Write(this, string, offset, length)
3062
3063 case 'ascii':
3064 return asciiWrite(this, string, offset, length)
3065
3066 case 'binary':
3067 return binaryWrite(this, string, offset, length)
3068
3069 case 'base64':
3070 // Warning: maxLength not taken into account in base64Write
3071 return base64Write(this, string, offset, length)
3072
3073 case 'ucs2':
3074 case 'ucs-2':
3075 case 'utf16le':
3076 case 'utf-16le':
3077 return ucs2Write(this, string, offset, length)
3078
3079 default:
3080 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3081 encoding = ('' + encoding).toLowerCase()
3082 loweredCase = true
3083 }
3084 }
3085 }
3086
3087 Buffer.prototype.toJSON = function toJSON () {
3088 return {
3089 type: 'Buffer',
3090 data: Array.prototype.slice.call(this._arr || this, 0)
3091 }
3092 }
3093
3094 function base64Slice (buf, start, end) {
3095 if (start === 0 && end === buf.length) {
3096 return base64.fromByteArray(buf)
3097 } else {
3098 return base64.fromByteArray(buf.slice(start, end))
3099 }
3100 }
3101
3102 function utf8Slice (buf, start, end) {
3103 end = Math.min(buf.length, end)
3104 var firstByte
3105 var secondByte
3106 var thirdByte
3107 var fourthByte
3108 var bytesPerSequence
3109 var tempCodePoint
3110 var codePoint
3111 var res = []
3112 var i = start
3113
3114 for (; i < end; i += bytesPerSequence) {
3115 firstByte = buf[i]
3116 codePoint = 0xFFFD
3117
3118 if (firstByte > 0xEF) {
3119 bytesPerSequence = 4
3120 } else if (firstByte > 0xDF) {
3121 bytesPerSequence = 3
3122 } else if (firstByte > 0xBF) {
3123 bytesPerSequence = 2
3124 } else {
3125 bytesPerSequence = 1
3126 }
3127
3128 if (i + bytesPerSequence <= end) {
3129 switch (bytesPerSequence) {
3130 case 1:
3131 if (firstByte < 0x80) {
3132 codePoint = firstByte
3133 }
3134 break
3135 case 2:
3136 secondByte = buf[i + 1]
3137 if ((secondByte & 0xC0) === 0x80) {
3138 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3139 if (tempCodePoint > 0x7F) {
3140 codePoint = tempCodePoint
3141 }
3142 }
3143 break
3144 case 3:
3145 secondByte = buf[i + 1]
3146 thirdByte = buf[i + 2]
3147 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3148 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3149 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3150 codePoint = tempCodePoint
3151 }
3152 }
3153 break
3154 case 4:
3155 secondByte = buf[i + 1]
3156 thirdByte = buf[i + 2]
3157 fourthByte = buf[i + 3]
3158 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3159 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3160 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3161 codePoint = tempCodePoint
3162 }
3163 }
3164 }
3165 }
3166
3167 if (codePoint === 0xFFFD) {
3168 // we generated an invalid codePoint so make sure to only advance by 1 byte
3169 bytesPerSequence = 1
3170 } else if (codePoint > 0xFFFF) {
3171 // encode to utf16 (surrogate pair dance)
3172 codePoint -= 0x10000
3173 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3174 codePoint = 0xDC00 | codePoint & 0x3FF
3175 }
3176
3177 res.push(codePoint)
3178 }
3179
3180 return String.fromCharCode.apply(String, res)
3181 }
3182
3183 function asciiSlice (buf, start, end) {
3184 var ret = ''
3185 end = Math.min(buf.length, end)
3186
3187 for (var i = start; i < end; i++) {
3188 ret += String.fromCharCode(buf[i] & 0x7F)
3189 }
3190 return ret
3191 }
3192
3193 function binarySlice (buf, start, end) {
3194 var ret = ''
3195 end = Math.min(buf.length, end)
3196
3197 for (var i = start; i < end; i++) {
3198 ret += String.fromCharCode(buf[i])
3199 }
3200 return ret
3201 }
3202
3203 function hexSlice (buf, start, end) {
3204 var len = buf.length
3205
3206 if (!start || start < 0) start = 0
3207 if (!end || end < 0 || end > len) end = len
3208
3209 var out = ''
3210 for (var i = start; i < end; i++) {
3211 out += toHex(buf[i])
3212 }
3213 return out
3214 }
3215
3216 function utf16leSlice (buf, start, end) {
3217 var bytes = buf.slice(start, end)
3218 var res = ''
3219 for (var i = 0; i < bytes.length; i += 2) {
3220 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3221 }
3222 return res
3223 }
3224
3225 Buffer.prototype.slice = function slice (start, end) {
3226 var len = this.length
3227 start = ~~start
3228 end = end === undefined ? len : ~~end
3229
3230 if (start < 0) {
3231 start += len
3232 if (start < 0) start = 0
3233 } else if (start > len) {
3234 start = len
3235 }
3236
3237 if (end < 0) {
3238 end += len
3239 if (end < 0) end = 0
3240 } else if (end > len) {
3241 end = len
3242 }
3243
3244 if (end < start) end = start
3245
3246 var newBuf
3247 if (Buffer.TYPED_ARRAY_SUPPORT) {
3248 newBuf = Buffer._augment(this.subarray(start, end))
3249 } else {
3250 var sliceLen = end - start
3251 newBuf = new Buffer(sliceLen, undefined)
3252 for (var i = 0; i < sliceLen; i++) {
3253 newBuf[i] = this[i + start]
3254 }
3255 }
3256
3257 if (newBuf.length) newBuf.parent = this.parent || this
3258
3259 return newBuf
3260 }
3261
3262 /*
3263 * Need to make sure that buffer isn't trying to write out of bounds.
3264 */
3265 function checkOffset (offset, ext, length) {
3266 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3267 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3268 }
3269
3270 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3271 offset = offset | 0
3272 byteLength = byteLength | 0
3273 if (!noAssert) checkOffset(offset, byteLength, this.length)
3274
3275 var val = this[offset]
3276 var mul = 1
3277 var i = 0
3278 while (++i < byteLength && (mul *= 0x100)) {
3279 val += this[offset + i] * mul
3280 }
3281
3282 return val
3283 }
3284
3285 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3286 offset = offset | 0
3287 byteLength = byteLength | 0
3288 if (!noAssert) {
3289 checkOffset(offset, byteLength, this.length)
3290 }
3291
3292 var val = this[offset + --byteLength]
3293 var mul = 1
3294 while (byteLength > 0 && (mul *= 0x100)) {
3295 val += this[offset + --byteLength] * mul
3296 }
3297
3298 return val
3299 }
3300
3301 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3302 if (!noAssert) checkOffset(offset, 1, this.length)
3303 return this[offset]
3304 }
3305
3306 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3307 if (!noAssert) checkOffset(offset, 2, this.length)
3308 return this[offset] | (this[offset + 1] << 8)
3309 }
3310
3311 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3312 if (!noAssert) checkOffset(offset, 2, this.length)
3313 return (this[offset] << 8) | this[offset + 1]
3314 }
3315
3316 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3317 if (!noAssert) checkOffset(offset, 4, this.length)
3318
3319 return ((this[offset]) |
3320 (this[offset + 1] << 8) |
3321 (this[offset + 2] << 16)) +
3322 (this[offset + 3] * 0x1000000)
3323 }
3324
3325 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3326 if (!noAssert) checkOffset(offset, 4, this.length)
3327
3328 return (this[offset] * 0x1000000) +
3329 ((this[offset + 1] << 16) |
3330 (this[offset + 2] << 8) |
3331 this[offset + 3])
3332 }
3333
3334 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3335 offset = offset | 0
3336 byteLength = byteLength | 0
3337 if (!noAssert) checkOffset(offset, byteLength, this.length)
3338
3339 var val = this[offset]
3340 var mul = 1
3341 var i = 0
3342 while (++i < byteLength && (mul *= 0x100)) {
3343 val += this[offset + i] * mul
3344 }
3345 mul *= 0x80
3346
3347 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3348
3349 return val
3350 }
3351
3352 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3353 offset = offset | 0
3354 byteLength = byteLength | 0
3355 if (!noAssert) checkOffset(offset, byteLength, this.length)
3356
3357 var i = byteLength
3358 var mul = 1
3359 var val = this[offset + --i]
3360 while (i > 0 && (mul *= 0x100)) {
3361 val += this[offset + --i] * mul
3362 }
3363 mul *= 0x80
3364
3365 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3366
3367 return val
3368 }
3369
3370 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3371 if (!noAssert) checkOffset(offset, 1, this.length)
3372 if (!(this[offset] & 0x80)) return (this[offset])
3373 return ((0xff - this[offset] + 1) * -1)
3374 }
3375
3376 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3377 if (!noAssert) checkOffset(offset, 2, this.length)
3378 var val = this[offset] | (this[offset + 1] << 8)
3379 return (val & 0x8000) ? val | 0xFFFF0000 : val
3380 }
3381
3382 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset, 2, this.length)
3384 var val = this[offset + 1] | (this[offset] << 8)
3385 return (val & 0x8000) ? val | 0xFFFF0000 : val
3386 }
3387
3388 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3389 if (!noAssert) checkOffset(offset, 4, this.length)
3390
3391 return (this[offset]) |
3392 (this[offset + 1] << 8) |
3393 (this[offset + 2] << 16) |
3394 (this[offset + 3] << 24)
3395 }
3396
3397 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3398 if (!noAssert) checkOffset(offset, 4, this.length)
3399
3400 return (this[offset] << 24) |
3401 (this[offset + 1] << 16) |
3402 (this[offset + 2] << 8) |
3403 (this[offset + 3])
3404 }
3405
3406 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3407 if (!noAssert) checkOffset(offset, 4, this.length)
3408 return ieee754.read(this, offset, true, 23, 4)
3409 }
3410
3411 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3412 if (!noAssert) checkOffset(offset, 4, this.length)
3413 return ieee754.read(this, offset, false, 23, 4)
3414 }
3415
3416 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3417 if (!noAssert) checkOffset(offset, 8, this.length)
3418 return ieee754.read(this, offset, true, 52, 8)
3419 }
3420
3421 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3422 if (!noAssert) checkOffset(offset, 8, this.length)
3423 return ieee754.read(this, offset, false, 52, 8)
3424 }
3425
3426 function checkInt (buf, value, offset, ext, max, min) {
3427 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3428 if (value > max || value < min) throw new RangeError('value is out of bounds')
3429 if (offset + ext > buf.length) throw new RangeError('index out of range')
3430 }
3431
3432 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3433 value = +value
3434 offset = offset | 0
3435 byteLength = byteLength | 0
3436 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3437
3438 var mul = 1
3439 var i = 0
3440 this[offset] = value & 0xFF
3441 while (++i < byteLength && (mul *= 0x100)) {
3442 this[offset + i] = (value / mul) & 0xFF
3443 }
3444
3445 return offset + byteLength
3446 }
3447
3448 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3449 value = +value
3450 offset = offset | 0
3451 byteLength = byteLength | 0
3452 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3453
3454 var i = byteLength - 1
3455 var mul = 1
3456 this[offset + i] = value & 0xFF
3457 while (--i >= 0 && (mul *= 0x100)) {
3458 this[offset + i] = (value / mul) & 0xFF
3459 }
3460
3461 return offset + byteLength
3462 }
3463
3464 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3465 value = +value
3466 offset = offset | 0
3467 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3468 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3469 this[offset] = value
3470 return offset + 1
3471 }
3472
3473 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3474 if (value < 0) value = 0xffff + value + 1
3475 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3476 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3477 (littleEndian ? i : 1 - i) * 8
3478 }
3479 }
3480
3481 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3482 value = +value
3483 offset = offset | 0
3484 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3485 if (Buffer.TYPED_ARRAY_SUPPORT) {
3486 this[offset] = value
3487 this[offset + 1] = (value >>> 8)
3488 } else {
3489 objectWriteUInt16(this, value, offset, true)
3490 }
3491 return offset + 2
3492 }
3493
3494 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3495 value = +value
3496 offset = offset | 0
3497 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3498 if (Buffer.TYPED_ARRAY_SUPPORT) {
3499 this[offset] = (value >>> 8)
3500 this[offset + 1] = value
3501 } else {
3502 objectWriteUInt16(this, value, offset, false)
3503 }
3504 return offset + 2
3505 }
3506
3507 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3508 if (value < 0) value = 0xffffffff + value + 1
3509 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3510 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3511 }
3512 }
3513
3514 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3515 value = +value
3516 offset = offset | 0
3517 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3518 if (Buffer.TYPED_ARRAY_SUPPORT) {
3519 this[offset + 3] = (value >>> 24)
3520 this[offset + 2] = (value >>> 16)
3521 this[offset + 1] = (value >>> 8)
3522 this[offset] = value
3523 } else {
3524 objectWriteUInt32(this, value, offset, true)
3525 }
3526 return offset + 4
3527 }
3528
3529 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3530 value = +value
3531 offset = offset | 0
3532 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3533 if (Buffer.TYPED_ARRAY_SUPPORT) {
3534 this[offset] = (value >>> 24)
3535 this[offset + 1] = (value >>> 16)
3536 this[offset + 2] = (value >>> 8)
3537 this[offset + 3] = value
3538 } else {
3539 objectWriteUInt32(this, value, offset, false)
3540 }
3541 return offset + 4
3542 }
3543
3544 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3545 value = +value
3546 offset = offset | 0
3547 if (!noAssert) {
3548 var limit = Math.pow(2, 8 * byteLength - 1)
3549
3550 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3551 }
3552
3553 var i = 0
3554 var mul = 1
3555 var sub = value < 0 ? 1 : 0
3556 this[offset] = value & 0xFF
3557 while (++i < byteLength && (mul *= 0x100)) {
3558 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3559 }
3560
3561 return offset + byteLength
3562 }
3563
3564 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3565 value = +value
3566 offset = offset | 0
3567 if (!noAssert) {
3568 var limit = Math.pow(2, 8 * byteLength - 1)
3569
3570 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3571 }
3572
3573 var i = byteLength - 1
3574 var mul = 1
3575 var sub = value < 0 ? 1 : 0
3576 this[offset + i] = value & 0xFF
3577 while (--i >= 0 && (mul *= 0x100)) {
3578 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3579 }
3580
3581 return offset + byteLength
3582 }
3583
3584 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3585 value = +value
3586 offset = offset | 0
3587 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3588 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3589 if (value < 0) value = 0xff + value + 1
3590 this[offset] = value
3591 return offset + 1
3592 }
3593
3594 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3595 value = +value
3596 offset = offset | 0
3597 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3598 if (Buffer.TYPED_ARRAY_SUPPORT) {
3599 this[offset] = value
3600 this[offset + 1] = (value >>> 8)
3601 } else {
3602 objectWriteUInt16(this, value, offset, true)
3603 }
3604 return offset + 2
3605 }
3606
3607 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3608 value = +value
3609 offset = offset | 0
3610 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3611 if (Buffer.TYPED_ARRAY_SUPPORT) {
3612 this[offset] = (value >>> 8)
3613 this[offset + 1] = value
3614 } else {
3615 objectWriteUInt16(this, value, offset, false)
3616 }
3617 return offset + 2
3618 }
3619
3620 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3621 value = +value
3622 offset = offset | 0
3623 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3624 if (Buffer.TYPED_ARRAY_SUPPORT) {
3625 this[offset] = value
3626 this[offset + 1] = (value >>> 8)
3627 this[offset + 2] = (value >>> 16)
3628 this[offset + 3] = (value >>> 24)
3629 } else {
3630 objectWriteUInt32(this, value, offset, true)
3631 }
3632 return offset + 4
3633 }
3634
3635 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3636 value = +value
3637 offset = offset | 0
3638 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3639 if (value < 0) value = 0xffffffff + value + 1
3640 if (Buffer.TYPED_ARRAY_SUPPORT) {
3641 this[offset] = (value >>> 24)
3642 this[offset + 1] = (value >>> 16)
3643 this[offset + 2] = (value >>> 8)
3644 this[offset + 3] = value
3645 } else {
3646 objectWriteUInt32(this, value, offset, false)
3647 }
3648 return offset + 4
3649 }
3650
3651 function checkIEEE754 (buf, value, offset, ext, max, min) {
3652 if (value > max || value < min) throw new RangeError('value is out of bounds')
3653 if (offset + ext > buf.length) throw new RangeError('index out of range')
3654 if (offset < 0) throw new RangeError('index out of range')
3655 }
3656
3657 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3658 if (!noAssert) {
3659 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3660 }
3661 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3662 return offset + 4
3663 }
3664
3665 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3666 return writeFloat(this, value, offset, true, noAssert)
3667 }
3668
3669 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3670 return writeFloat(this, value, offset, false, noAssert)
3671 }
3672
3673 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3674 if (!noAssert) {
3675 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3676 }
3677 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3678 return offset + 8
3679 }
3680
3681 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3682 return writeDouble(this, value, offset, true, noAssert)
3683 }
3684
3685 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3686 return writeDouble(this, value, offset, false, noAssert)
3687 }
3688
3689 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3690 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3691 if (!start) start = 0
3692 if (!end && end !== 0) end = this.length
3693 if (targetStart >= target.length) targetStart = target.length
3694 if (!targetStart) targetStart = 0
3695 if (end > 0 && end < start) end = start
3696
3697 // Copy 0 bytes; we're done
3698 if (end === start) return 0
3699 if (target.length === 0 || this.length === 0) return 0
3700
3701 // Fatal error conditions
3702 if (targetStart < 0) {
3703 throw new RangeError('targetStart out of bounds')
3704 }
3705 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3706 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3707
3708 // Are we oob?
3709 if (end > this.length) end = this.length
3710 if (target.length - targetStart < end - start) {
3711 end = target.length - targetStart + start
3712 }
3713
3714 var len = end - start
3715 var i
3716
3717 if (this === target && start < targetStart && targetStart < end) {
3718 // descending copy from end
3719 for (i = len - 1; i >= 0; i--) {
3720 target[i + targetStart] = this[i + start]
3721 }
3722 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3723 // ascending copy from start
3724 for (i = 0; i < len; i++) {
3725 target[i + targetStart] = this[i + start]
3726 }
3727 } else {
3728 target._set(this.subarray(start, start + len), targetStart)
3729 }
3730
3731 return len
3732 }
3733
3734 // fill(value, start=0, end=buffer.length)
3735 Buffer.prototype.fill = function fill (value, start, end) {
3736 if (!value) value = 0
3737 if (!start) start = 0
3738 if (!end) end = this.length
3739
3740 if (end < start) throw new RangeError('end < start')
3741
3742 // Fill 0 bytes; we're done
3743 if (end === start) return
3744 if (this.length === 0) return
3745
3746 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3747 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3748
3749 var i
3750 if (typeof value === 'number') {
3751 for (i = start; i < end; i++) {
3752 this[i] = value
3753 }
3754 } else {
3755 var bytes = utf8ToBytes(value.toString())
3756 var len = bytes.length
3757 for (i = start; i < end; i++) {
3758 this[i] = bytes[i % len]
3759 }
3760 }
3761
3762 return this
3763 }
3764
3765 /**
3766 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3767 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3768 */
3769 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3770 if (typeof Uint8Array !== 'undefined') {
3771 if (Buffer.TYPED_ARRAY_SUPPORT) {
3772 return (new Buffer(this)).buffer
3773 } else {
3774 var buf = new Uint8Array(this.length)
3775 for (var i = 0, len = buf.length; i < len; i += 1) {
3776 buf[i] = this[i]
3777 }
3778 return buf.buffer
3779 }
3780 } else {
3781 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3782 }
3783 }
3784
3785 // HELPER FUNCTIONS
3786 // ================
3787
3788 var BP = Buffer.prototype
3789
3790 /**
3791 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3792 */
3793 Buffer._augment = function _augment (arr) {
3794 arr.constructor = Buffer
3795 arr._isBuffer = true
3796
3797 // save reference to original Uint8Array set method before overwriting
3798 arr._set = arr.set
3799
3800 // deprecated
3801 arr.get = BP.get
3802 arr.set = BP.set
3803
3804 arr.write = BP.write
3805 arr.toString = BP.toString
3806 arr.toLocaleString = BP.toString
3807 arr.toJSON = BP.toJSON
3808 arr.equals = BP.equals
3809 arr.compare = BP.compare
3810 arr.indexOf = BP.indexOf
3811 arr.copy = BP.copy
3812 arr.slice = BP.slice
3813 arr.readUIntLE = BP.readUIntLE
3814 arr.readUIntBE = BP.readUIntBE
3815 arr.readUInt8 = BP.readUInt8
3816 arr.readUInt16LE = BP.readUInt16LE
3817 arr.readUInt16BE = BP.readUInt16BE
3818 arr.readUInt32LE = BP.readUInt32LE
3819 arr.readUInt32BE = BP.readUInt32BE
3820 arr.readIntLE = BP.readIntLE
3821 arr.readIntBE = BP.readIntBE
3822 arr.readInt8 = BP.readInt8
3823 arr.readInt16LE = BP.readInt16LE
3824 arr.readInt16BE = BP.readInt16BE
3825 arr.readInt32LE = BP.readInt32LE
3826 arr.readInt32BE = BP.readInt32BE
3827 arr.readFloatLE = BP.readFloatLE
3828 arr.readFloatBE = BP.readFloatBE
3829 arr.readDoubleLE = BP.readDoubleLE
3830 arr.readDoubleBE = BP.readDoubleBE
3831 arr.writeUInt8 = BP.writeUInt8
3832 arr.writeUIntLE = BP.writeUIntLE
3833 arr.writeUIntBE = BP.writeUIntBE
3834 arr.writeUInt16LE = BP.writeUInt16LE
3835 arr.writeUInt16BE = BP.writeUInt16BE
3836 arr.writeUInt32LE = BP.writeUInt32LE
3837 arr.writeUInt32BE = BP.writeUInt32BE
3838 arr.writeIntLE = BP.writeIntLE
3839 arr.writeIntBE = BP.writeIntBE
3840 arr.writeInt8 = BP.writeInt8
3841 arr.writeInt16LE = BP.writeInt16LE
3842 arr.writeInt16BE = BP.writeInt16BE
3843 arr.writeInt32LE = BP.writeInt32LE
3844 arr.writeInt32BE = BP.writeInt32BE
3845 arr.writeFloatLE = BP.writeFloatLE
3846 arr.writeFloatBE = BP.writeFloatBE
3847 arr.writeDoubleLE = BP.writeDoubleLE
3848 arr.writeDoubleBE = BP.writeDoubleBE
3849 arr.fill = BP.fill
3850 arr.inspect = BP.inspect
3851 arr.toArrayBuffer = BP.toArrayBuffer
3852
3853 return arr
3854 }
3855
3856 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
3857
3858 function base64clean (str) {
3859 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3860 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3861 // Node converts strings with length < 2 to ''
3862 if (str.length < 2) return ''
3863 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3864 while (str.length % 4 !== 0) {
3865 str = str + '='
3866 }
3867 return str
3868 }
3869
3870 function stringtrim (str) {
3871 if (str.trim) return str.trim()
3872 return str.replace(/^\s+|\s+$/g, '')
3873 }
3874
3875 function toHex (n) {
3876 if (n < 16) return '0' + n.toString(16)
3877 return n.toString(16)
3878 }
3879
3880 function utf8ToBytes (string, units) {
3881 units = units || Infinity
3882 var codePoint
3883 var length = string.length
3884 var leadSurrogate = null
3885 var bytes = []
3886
3887 for (var i = 0; i < length; i++) {
3888 codePoint = string.charCodeAt(i)
3889
3890 // is surrogate component
3891 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3892 // last char was a lead
3893 if (!leadSurrogate) {
3894 // no lead yet
3895 if (codePoint > 0xDBFF) {
3896 // unexpected trail
3897 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3898 continue
3899
3900 } else if (i + 1 === length) {
3901 // unpaired lead
3902 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3903 continue
3904 }
3905
3906 // valid lead
3907 leadSurrogate = codePoint
3908
3909 continue
3910 }
3911
3912 // 2 leads in a row
3913 if (codePoint < 0xDC00) {
3914 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3915 leadSurrogate = codePoint
3916 continue
3917 }
3918
3919 // valid surrogate pair
3920 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3921
3922 } else if (leadSurrogate) {
3923 // valid bmp char, but last char was a lead
3924 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3925 }
3926
3927 leadSurrogate = null
3928
3929 // encode utf8
3930 if (codePoint < 0x80) {
3931 if ((units -= 1) < 0) break
3932 bytes.push(codePoint)
3933 } else if (codePoint < 0x800) {
3934 if ((units -= 2) < 0) break
3935 bytes.push(
3936 codePoint >> 0x6 | 0xC0,
3937 codePoint & 0x3F | 0x80
3938 )
3939 } else if (codePoint < 0x10000) {
3940 if ((units -= 3) < 0) break
3941 bytes.push(
3942 codePoint >> 0xC | 0xE0,
3943 codePoint >> 0x6 & 0x3F | 0x80,
3944 codePoint & 0x3F | 0x80
3945 )
3946 } else if (codePoint < 0x110000) {
3947 if ((units -= 4) < 0) break
3948 bytes.push(
3949 codePoint >> 0x12 | 0xF0,
3950 codePoint >> 0xC & 0x3F | 0x80,
3951 codePoint >> 0x6 & 0x3F | 0x80,
3952 codePoint & 0x3F | 0x80
3953 )
3954 } else {
3955 throw new Error('Invalid code point')
3956 }
3957 }
3958
3959 return bytes
3960 }
3961
3962 function asciiToBytes (str) {
3963 var byteArray = []
3964 for (var i = 0; i < str.length; i++) {
3965 // Node's code seems to be doing this and not & 0x7F..
3966 byteArray.push(str.charCodeAt(i) & 0xFF)
3967 }
3968 return byteArray
3969 }
3970
3971 function utf16leToBytes (str, units) {
3972 var c, hi, lo
3973 var byteArray = []
3974 for (var i = 0; i < str.length; i++) {
3975 if ((units -= 2) < 0) break
3976
3977 c = str.charCodeAt(i)
3978 hi = c >> 8
3979 lo = c % 256
3980 byteArray.push(lo)
3981 byteArray.push(hi)
3982 }
3983
3984 return byteArray
3985 }
3986
3987 function base64ToBytes (str) {
3988 return base64.toByteArray(base64clean(str))
3989 }
3990
3991 function blitBuffer (src, dst, offset, length) {
3992 for (var i = 0; i < length; i++) {
3993 if ((i + offset >= dst.length) || (i >= src.length)) break
3994 dst[i + offset] = src[i]
3995 }
3996 return i
3997 }
3998
3999 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4000 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4001
4002 ;(function (exports) {
4003 'use strict';
4004
4005 var Arr = (typeof Uint8Array !== 'undefined')
4006 ? Uint8Array
4007 : Array
4008
4009 var PLUS = '+'.charCodeAt(0)
4010 var SLASH = '/'.charCodeAt(0)
4011 var NUMBER = '0'.charCodeAt(0)
4012 var LOWER = 'a'.charCodeAt(0)
4013 var UPPER = 'A'.charCodeAt(0)
4014 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4015 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4016
4017 function decode (elt) {
4018 var code = elt.charCodeAt(0)
4019 if (code === PLUS ||
4020 code === PLUS_URL_SAFE)
4021 return 62 // '+'
4022 if (code === SLASH ||
4023 code === SLASH_URL_SAFE)
4024 return 63 // '/'
4025 if (code < NUMBER)
4026 return -1 //no match
4027 if (code < NUMBER + 10)
4028 return code - NUMBER + 26 + 26
4029 if (code < UPPER + 26)
4030 return code - UPPER
4031 if (code < LOWER + 26)
4032 return code - LOWER + 26
4033 }
4034
4035 function b64ToByteArray (b64) {
4036 var i, j, l, tmp, placeHolders, arr
4037
4038 if (b64.length % 4 > 0) {
4039 throw new Error('Invalid string. Length must be a multiple of 4')
4040 }
4041
4042 // the number of equal signs (place holders)
4043 // if there are two placeholders, than the two characters before it
4044 // represent one byte
4045 // if there is only one, then the three characters before it represent 2 bytes
4046 // this is just a cheap hack to not do indexOf twice
4047 var len = b64.length
4048 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4049
4050 // base64 is 4/3 + up to two characters of the original data
4051 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4052
4053 // if there are placeholders, only get up to the last complete 4 chars
4054 l = placeHolders > 0 ? b64.length - 4 : b64.length
4055
4056 var L = 0
4057
4058 function push (v) {
4059 arr[L++] = v
4060 }
4061
4062 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4063 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4064 push((tmp & 0xFF0000) >> 16)
4065 push((tmp & 0xFF00) >> 8)
4066 push(tmp & 0xFF)
4067 }
4068
4069 if (placeHolders === 2) {
4070 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4071 push(tmp & 0xFF)
4072 } else if (placeHolders === 1) {
4073 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4074 push((tmp >> 8) & 0xFF)
4075 push(tmp & 0xFF)
4076 }
4077
4078 return arr
4079 }
4080
4081 function uint8ToBase64 (uint8) {
4082 var i,
4083 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4084 output = "",
4085 temp, length
4086
4087 function encode (num) {
4088 return lookup.charAt(num)
4089 }
4090
4091 function tripletToBase64 (num) {
4092 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4093 }
4094
4095 // go through the array every three bytes, we'll deal with trailing stuff later
4096 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4097 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4098 output += tripletToBase64(temp)
4099 }
4100
4101 // pad the end with zeros, but make sure to not forget the extra bytes
4102 switch (extraBytes) {
4103 case 1:
4104 temp = uint8[uint8.length - 1]
4105 output += encode(temp >> 2)
4106 output += encode((temp << 4) & 0x3F)
4107 output += '=='
4108 break
4109 case 2:
4110 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4111 output += encode(temp >> 10)
4112 output += encode((temp >> 4) & 0x3F)
4113 output += encode((temp << 2) & 0x3F)
4114 output += '='
4115 break
4116 }
4117
4118 return output
4119 }
4120
4121 exports.toByteArray = b64ToByteArray
4122 exports.fromByteArray = uint8ToBase64
4123 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4124
4125 },{}],9:[function(require,module,exports){
4126 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4127 var e, m
4128 var eLen = nBytes * 8 - mLen - 1
4129 var eMax = (1 << eLen) - 1
4130 var eBias = eMax >> 1
4131 var nBits = -7
4132 var i = isLE ? (nBytes - 1) : 0
4133 var d = isLE ? -1 : 1
4134 var s = buffer[offset + i]
4135
4136 i += d
4137
4138 e = s & ((1 << (-nBits)) - 1)
4139 s >>= (-nBits)
4140 nBits += eLen
4141 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4142
4143 m = e & ((1 << (-nBits)) - 1)
4144 e >>= (-nBits)
4145 nBits += mLen
4146 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4147
4148 if (e === 0) {
4149 e = 1 - eBias
4150 } else if (e === eMax) {
4151 return m ? NaN : ((s ? -1 : 1) * Infinity)
4152 } else {
4153 m = m + Math.pow(2, mLen)
4154 e = e - eBias
4155 }
4156 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4157 }
4158
4159 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4160 var e, m, c
4161 var eLen = nBytes * 8 - mLen - 1
4162 var eMax = (1 << eLen) - 1
4163 var eBias = eMax >> 1
4164 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4165 var i = isLE ? 0 : (nBytes - 1)
4166 var d = isLE ? 1 : -1
4167 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4168
4169 value = Math.abs(value)
4170
4171 if (isNaN(value) || value === Infinity) {
4172 m = isNaN(value) ? 1 : 0
4173 e = eMax
4174 } else {
4175 e = Math.floor(Math.log(value) / Math.LN2)
4176 if (value * (c = Math.pow(2, -e)) < 1) {
4177 e--
4178 c *= 2
4179 }
4180 if (e + eBias >= 1) {
4181 value += rt / c
4182 } else {
4183 value += rt * Math.pow(2, 1 - eBias)
4184 }
4185 if (value * c >= 2) {
4186 e++
4187 c /= 2
4188 }
4189
4190 if (e + eBias >= eMax) {
4191 m = 0
4192 e = eMax
4193 } else if (e + eBias >= 1) {
4194 m = (value * c - 1) * Math.pow(2, mLen)
4195 e = e + eBias
4196 } else {
4197 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4198 e = 0
4199 }
4200 }
4201
4202 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4203
4204 e = (e << mLen) | m
4205 eLen += mLen
4206 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4207
4208 buffer[offset + i - d] |= s * 128
4209 }
4210
4211 },{}],10:[function(require,module,exports){
4212
4213 /**
4214 * isArray
4215 */
4216
4217 var isArray = Array.isArray;
4218
4219 /**
4220 * toString
4221 */
4222
4223 var str = Object.prototype.toString;
4224
4225 /**
4226 * Whether or not the given `val`
4227 * is an array.
4228 *
4229 * example:
4230 *
4231 * isArray([]);
4232 * // > true
4233 * isArray(arguments);
4234 * // > false
4235 * isArray('');
4236 * // > false
4237 *
4238 * @param {mixed} val
4239 * @return {bool}
4240 */
4241
4242 module.exports = isArray || function (val) {
4243 return !! val && '[object Array]' == str.call(val);
4244 };
4245
4246 },{}],11:[function(require,module,exports){
4247 // Copyright Joyent, Inc. and other Node contributors.
4248 //
4249 // Permission is hereby granted, free of charge, to any person obtaining a
4250 // copy of this software and associated documentation files (the
4251 // "Software"), to deal in the Software without restriction, including
4252 // without limitation the rights to use, copy, modify, merge, publish,
4253 // distribute, sublicense, and/or sell copies of the Software, and to permit
4254 // persons to whom the Software is furnished to do so, subject to the
4255 // following conditions:
4256 //
4257 // The above copyright notice and this permission notice shall be included
4258 // in all copies or substantial portions of the Software.
4259 //
4260 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4261 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4262 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4263 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4264 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4265 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4266 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4267
4268 function EventEmitter() {
4269 this._events = this._events || {};
4270 this._maxListeners = this._maxListeners || undefined;
4271 }
4272 module.exports = EventEmitter;
4273
4274 // Backwards-compat with node 0.10.x
4275 EventEmitter.EventEmitter = EventEmitter;
4276
4277 EventEmitter.prototype._events = undefined;
4278 EventEmitter.prototype._maxListeners = undefined;
4279
4280 // By default EventEmitters will print a warning if more than 10 listeners are
4281 // added to it. This is a useful default which helps finding memory leaks.
4282 EventEmitter.defaultMaxListeners = 10;
4283
4284 // Obviously not all Emitters should be limited to 10. This function allows
4285 // that to be increased. Set to zero for unlimited.
4286 EventEmitter.prototype.setMaxListeners = function(n) {
4287 if (!isNumber(n) || n < 0 || isNaN(n))
4288 throw TypeError('n must be a positive number');
4289 this._maxListeners = n;
4290 return this;
4291 };
4292
4293 EventEmitter.prototype.emit = function(type) {
4294 var er, handler, len, args, i, listeners;
4295
4296 if (!this._events)
4297 this._events = {};
4298
4299 // If there is no 'error' event listener then throw.
4300 if (type === 'error') {
4301 if (!this._events.error ||
4302 (isObject(this._events.error) && !this._events.error.length)) {
4303 er = arguments[1];
4304 if (er instanceof Error) {
4305 throw er; // Unhandled 'error' event
4306 }
4307 throw TypeError('Uncaught, unspecified "error" event.');
4308 }
4309 }
4310
4311 handler = this._events[type];
4312
4313 if (isUndefined(handler))
4314 return false;
4315
4316 if (isFunction(handler)) {
4317 switch (arguments.length) {
4318 // fast cases
4319 case 1:
4320 handler.call(this);
4321 break;
4322 case 2:
4323 handler.call(this, arguments[1]);
4324 break;
4325 case 3:
4326 handler.call(this, arguments[1], arguments[2]);
4327 break;
4328 // slower
4329 default:
4330 len = arguments.length;
4331 args = new Array(len - 1);
4332 for (i = 1; i < len; i++)
4333 args[i - 1] = arguments[i];
4334 handler.apply(this, args);
4335 }
4336 } else if (isObject(handler)) {
4337 len = arguments.length;
4338 args = new Array(len - 1);
4339 for (i = 1; i < len; i++)
4340 args[i - 1] = arguments[i];
4341
4342 listeners = handler.slice();
4343 len = listeners.length;
4344 for (i = 0; i < len; i++)
4345 listeners[i].apply(this, args);
4346 }
4347
4348 return true;
4349 };
4350
4351 EventEmitter.prototype.addListener = function(type, listener) {
4352 var m;
4353
4354 if (!isFunction(listener))
4355 throw TypeError('listener must be a function');
4356
4357 if (!this._events)
4358 this._events = {};
4359
4360 // To avoid recursion in the case that type === "newListener"! Before
4361 // adding it to the listeners, first emit "newListener".
4362 if (this._events.newListener)
4363 this.emit('newListener', type,
4364 isFunction(listener.listener) ?
4365 listener.listener : listener);
4366
4367 if (!this._events[type])
4368 // Optimize the case of one listener. Don't need the extra array object.
4369 this._events[type] = listener;
4370 else if (isObject(this._events[type]))
4371 // If we've already got an array, just append.
4372 this._events[type].push(listener);
4373 else
4374 // Adding the second element, need to change to array.
4375 this._events[type] = [this._events[type], listener];
4376
4377 // Check for listener leak
4378 if (isObject(this._events[type]) && !this._events[type].warned) {
4379 var m;
4380 if (!isUndefined(this._maxListeners)) {
4381 m = this._maxListeners;
4382 } else {
4383 m = EventEmitter.defaultMaxListeners;
4384 }
4385
4386 if (m && m > 0 && this._events[type].length > m) {
4387 this._events[type].warned = true;
4388 console.error('(node) warning: possible EventEmitter memory ' +
4389 'leak detected. %d listeners added. ' +
4390 'Use emitter.setMaxListeners() to increase limit.',
4391 this._events[type].length);
4392 if (typeof console.trace === 'function') {
4393 // not supported in IE 10
4394 console.trace();
4395 }
4396 }
4397 }
4398
4399 return this;
4400 };
4401
4402 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4403
4404 EventEmitter.prototype.once = function(type, listener) {
4405 if (!isFunction(listener))
4406 throw TypeError('listener must be a function');
4407
4408 var fired = false;
4409
4410 function g() {
4411 this.removeListener(type, g);
4412
4413 if (!fired) {
4414 fired = true;
4415 listener.apply(this, arguments);
4416 }
4417 }
4418
4419 g.listener = listener;
4420 this.on(type, g);
4421
4422 return this;
4423 };
4424
4425 // emits a 'removeListener' event iff the listener was removed
4426 EventEmitter.prototype.removeListener = function(type, listener) {
4427 var list, position, length, i;
4428
4429 if (!isFunction(listener))
4430 throw TypeError('listener must be a function');
4431
4432 if (!this._events || !this._events[type])
4433 return this;
4434
4435 list = this._events[type];
4436 length = list.length;
4437 position = -1;
4438
4439 if (list === listener ||
4440 (isFunction(list.listener) && list.listener === listener)) {
4441 delete this._events[type];
4442 if (this._events.removeListener)
4443 this.emit('removeListener', type, listener);
4444
4445 } else if (isObject(list)) {
4446 for (i = length; i-- > 0;) {
4447 if (list[i] === listener ||
4448 (list[i].listener && list[i].listener === listener)) {
4449 position = i;
4450 break;
4451 }
4452 }
4453
4454 if (position < 0)
4455 return this;
4456
4457 if (list.length === 1) {
4458 list.length = 0;
4459 delete this._events[type];
4460 } else {
4461 list.splice(position, 1);
4462 }
4463
4464 if (this._events.removeListener)
4465 this.emit('removeListener', type, listener);
4466 }
4467
4468 return this;
4469 };
4470
4471 EventEmitter.prototype.removeAllListeners = function(type) {
4472 var key, listeners;
4473
4474 if (!this._events)
4475 return this;
4476
4477 // not listening for removeListener, no need to emit
4478 if (!this._events.removeListener) {
4479 if (arguments.length === 0)
4480 this._events = {};
4481 else if (this._events[type])
4482 delete this._events[type];
4483 return this;
4484 }
4485
4486 // emit removeListener for all listeners on all events
4487 if (arguments.length === 0) {
4488 for (key in this._events) {
4489 if (key === 'removeListener') continue;
4490 this.removeAllListeners(key);
4491 }
4492 this.removeAllListeners('removeListener');
4493 this._events = {};
4494 return this;
4495 }
4496
4497 listeners = this._events[type];
4498
4499 if (isFunction(listeners)) {
4500 this.removeListener(type, listeners);
4501 } else {
4502 // LIFO order
4503 while (listeners.length)
4504 this.removeListener(type, listeners[listeners.length - 1]);
4505 }
4506 delete this._events[type];
4507
4508 return this;
4509 };
4510
4511 EventEmitter.prototype.listeners = function(type) {
4512 var ret;
4513 if (!this._events || !this._events[type])
4514 ret = [];
4515 else if (isFunction(this._events[type]))
4516 ret = [this._events[type]];
4517 else
4518 ret = this._events[type].slice();
4519 return ret;
4520 };
4521
4522 EventEmitter.listenerCount = function(emitter, type) {
4523 var ret;
4524 if (!emitter._events || !emitter._events[type])
4525 ret = 0;
4526 else if (isFunction(emitter._events[type]))
4527 ret = 1;
4528 else
4529 ret = emitter._events[type].length;
4530 return ret;
4531 };
4532
4533 function isFunction(arg) {
4534 return typeof arg === 'function';
4535 }
4536
4537 function isNumber(arg) {
4538 return typeof arg === 'number';
4539 }
4540
4541 function isObject(arg) {
4542 return typeof arg === 'object' && arg !== null;
4543 }
4544
4545 function isUndefined(arg) {
4546 return arg === void 0;
4547 }
4548
4549 },{}],12:[function(require,module,exports){
4550 if (typeof Object.create === 'function') {
4551 // implementation from standard node.js 'util' module
4552 module.exports = function inherits(ctor, superCtor) {
4553 ctor.super_ = superCtor
4554 ctor.prototype = Object.create(superCtor.prototype, {
4555 constructor: {
4556 value: ctor,
4557 enumerable: false,
4558 writable: true,
4559 configurable: true
4560 }
4561 });
4562 };
4563 } else {
4564 // old school shim for old browsers
4565 module.exports = function inherits(ctor, superCtor) {
4566 ctor.super_ = superCtor
4567 var TempCtor = function () {}
4568 TempCtor.prototype = superCtor.prototype
4569 ctor.prototype = new TempCtor()
4570 ctor.prototype.constructor = ctor
4571 }
4572 }
4573
4574 },{}],13:[function(require,module,exports){
4575 module.exports = Array.isArray || function (arr) {
4576 return Object.prototype.toString.call(arr) == '[object Array]';
4577 };
4578
4579 },{}],14:[function(require,module,exports){
4580 // shim for using process in browser
4581
4582 var process = module.exports = {};
4583 var queue = [];
4584 var draining = false;
4585 var currentQueue;
4586 var queueIndex = -1;
4587
4588 function cleanUpNextTick() {
4589 draining = false;
4590 if (currentQueue.length) {
4591 queue = currentQueue.concat(queue);
4592 } else {
4593 queueIndex = -1;
4594 }
4595 if (queue.length) {
4596 drainQueue();
4597 }
4598 }
4599
4600 function drainQueue() {
4601 if (draining) {
4602 return;
4603 }
4604 var timeout = setTimeout(cleanUpNextTick);
4605 draining = true;
4606
4607 var len = queue.length;
4608 while(len) {
4609 currentQueue = queue;
4610 queue = [];
4611 while (++queueIndex < len) {
4612 currentQueue[queueIndex].run();
4613 }
4614 queueIndex = -1;
4615 len = queue.length;
4616 }
4617 currentQueue = null;
4618 draining = false;
4619 clearTimeout(timeout);
4620 }
4621
4622 process.nextTick = function (fun) {
4623 var args = new Array(arguments.length - 1);
4624 if (arguments.length > 1) {
4625 for (var i = 1; i < arguments.length; i++) {
4626 args[i - 1] = arguments[i];
4627 }
4628 }
4629 queue.push(new Item(fun, args));
4630 if (queue.length === 1 && !draining) {
4631 setTimeout(drainQueue, 0);
4632 }
4633 };
4634
4635 // v8 likes predictible objects
4636 function Item(fun, array) {
4637 this.fun = fun;
4638 this.array = array;
4639 }
4640 Item.prototype.run = function () {
4641 this.fun.apply(null, this.array);
4642 };
4643 process.title = 'browser';
4644 process.browser = true;
4645 process.env = {};
4646 process.argv = [];
4647 process.version = ''; // empty string to avoid regexp issues
4648 process.versions = {};
4649
4650 function noop() {}
4651
4652 process.on = noop;
4653 process.addListener = noop;
4654 process.once = noop;
4655 process.off = noop;
4656 process.removeListener = noop;
4657 process.removeAllListeners = noop;
4658 process.emit = noop;
4659
4660 process.binding = function (name) {
4661 throw new Error('process.binding is not supported');
4662 };
4663
4664 // TODO(shtylman)
4665 process.cwd = function () { return '/' };
4666 process.chdir = function (dir) {
4667 throw new Error('process.chdir is not supported');
4668 };
4669 process.umask = function() { return 0; };
4670
4671 },{}],15:[function(require,module,exports){
4672 module.exports = require("./lib/_stream_duplex.js")
4673
4674 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4675 (function (process){
4676 // Copyright Joyent, Inc. and other Node contributors.
4677 //
4678 // Permission is hereby granted, free of charge, to any person obtaining a
4679 // copy of this software and associated documentation files (the
4680 // "Software"), to deal in the Software without restriction, including
4681 // without limitation the rights to use, copy, modify, merge, publish,
4682 // distribute, sublicense, and/or sell copies of the Software, and to permit
4683 // persons to whom the Software is furnished to do so, subject to the
4684 // following conditions:
4685 //
4686 // The above copyright notice and this permission notice shall be included
4687 // in all copies or substantial portions of the Software.
4688 //
4689 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4690 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4691 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4692 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4693 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4694 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4695 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4696
4697 // a duplex stream is just a stream that is both readable and writable.
4698 // Since JS doesn't have multiple prototypal inheritance, this class
4699 // prototypally inherits from Readable, and then parasitically from
4700 // Writable.
4701
4702 module.exports = Duplex;
4703
4704 /*<replacement>*/
4705 var objectKeys = Object.keys || function (obj) {
4706 var keys = [];
4707 for (var key in obj) keys.push(key);
4708 return keys;
4709 }
4710 /*</replacement>*/
4711
4712
4713 /*<replacement>*/
4714 var util = require('core-util-is');
4715 util.inherits = require('inherits');
4716 /*</replacement>*/
4717
4718 var Readable = require('./_stream_readable');
4719 var Writable = require('./_stream_writable');
4720
4721 util.inherits(Duplex, Readable);
4722
4723 forEach(objectKeys(Writable.prototype), function(method) {
4724 if (!Duplex.prototype[method])
4725 Duplex.prototype[method] = Writable.prototype[method];
4726 });
4727
4728 function Duplex(options) {
4729 if (!(this instanceof Duplex))
4730 return new Duplex(options);
4731
4732 Readable.call(this, options);
4733 Writable.call(this, options);
4734
4735 if (options && options.readable === false)
4736 this.readable = false;
4737
4738 if (options && options.writable === false)
4739 this.writable = false;
4740
4741 this.allowHalfOpen = true;
4742 if (options && options.allowHalfOpen === false)
4743 this.allowHalfOpen = false;
4744
4745 this.once('end', onend);
4746 }
4747
4748 // the no-half-open enforcer
4749 function onend() {
4750 // if we allow half-open state, or if the writable side ended,
4751 // then we're ok.
4752 if (this.allowHalfOpen || this._writableState.ended)
4753 return;
4754
4755 // no more data can be written.
4756 // But allow more writes to happen in this tick.
4757 process.nextTick(this.end.bind(this));
4758 }
4759
4760 function forEach (xs, f) {
4761 for (var i = 0, l = xs.length; i < l; i++) {
4762 f(xs[i], i);
4763 }
4764 }
4765
4766 }).call(this,require('_process'))
4767 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4768 // Copyright Joyent, Inc. and other Node contributors.
4769 //
4770 // Permission is hereby granted, free of charge, to any person obtaining a
4771 // copy of this software and associated documentation files (the
4772 // "Software"), to deal in the Software without restriction, including
4773 // without limitation the rights to use, copy, modify, merge, publish,
4774 // distribute, sublicense, and/or sell copies of the Software, and to permit
4775 // persons to whom the Software is furnished to do so, subject to the
4776 // following conditions:
4777 //
4778 // The above copyright notice and this permission notice shall be included
4779 // in all copies or substantial portions of the Software.
4780 //
4781 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4782 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4783 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4784 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4785 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4786 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4787 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4788
4789 // a passthrough stream.
4790 // basically just the most minimal sort of Transform stream.
4791 // Every written chunk gets output as-is.
4792
4793 module.exports = PassThrough;
4794
4795 var Transform = require('./_stream_transform');
4796
4797 /*<replacement>*/
4798 var util = require('core-util-is');
4799 util.inherits = require('inherits');
4800 /*</replacement>*/
4801
4802 util.inherits(PassThrough, Transform);
4803
4804 function PassThrough(options) {
4805 if (!(this instanceof PassThrough))
4806 return new PassThrough(options);
4807
4808 Transform.call(this, options);
4809 }
4810
4811 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4812 cb(null, chunk);
4813 };
4814
4815 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4816 (function (process){
4817 // Copyright Joyent, Inc. and other Node contributors.
4818 //
4819 // Permission is hereby granted, free of charge, to any person obtaining a
4820 // copy of this software and associated documentation files (the
4821 // "Software"), to deal in the Software without restriction, including
4822 // without limitation the rights to use, copy, modify, merge, publish,
4823 // distribute, sublicense, and/or sell copies of the Software, and to permit
4824 // persons to whom the Software is furnished to do so, subject to the
4825 // following conditions:
4826 //
4827 // The above copyright notice and this permission notice shall be included
4828 // in all copies or substantial portions of the Software.
4829 //
4830 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4831 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4832 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4833 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4834 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4835 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4836 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4837
4838 module.exports = Readable;
4839
4840 /*<replacement>*/
4841 var isArray = require('isarray');
4842 /*</replacement>*/
4843
4844
4845 /*<replacement>*/
4846 var Buffer = require('buffer').Buffer;
4847 /*</replacement>*/
4848
4849 Readable.ReadableState = ReadableState;
4850
4851 var EE = require('events').EventEmitter;
4852
4853 /*<replacement>*/
4854 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4855 return emitter.listeners(type).length;
4856 };
4857 /*</replacement>*/
4858
4859 var Stream = require('stream');
4860
4861 /*<replacement>*/
4862 var util = require('core-util-is');
4863 util.inherits = require('inherits');
4864 /*</replacement>*/
4865
4866 var StringDecoder;
4867
4868
4869 /*<replacement>*/
4870 var debug = require('util');
4871 if (debug && debug.debuglog) {
4872 debug = debug.debuglog('stream');
4873 } else {
4874 debug = function () {};
4875 }
4876 /*</replacement>*/
4877
4878
4879 util.inherits(Readable, Stream);
4880
4881 function ReadableState(options, stream) {
4882 var Duplex = require('./_stream_duplex');
4883
4884 options = options || {};
4885
4886 // the point at which it stops calling _read() to fill the buffer
4887 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4888 var hwm = options.highWaterMark;
4889 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4890 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4891
4892 // cast to ints.
4893 this.highWaterMark = ~~this.highWaterMark;
4894
4895 this.buffer = [];
4896 this.length = 0;
4897 this.pipes = null;
4898 this.pipesCount = 0;
4899 this.flowing = null;
4900 this.ended = false;
4901 this.endEmitted = false;
4902 this.reading = false;
4903
4904 // a flag to be able to tell if the onwrite cb is called immediately,
4905 // or on a later tick. We set this to true at first, because any
4906 // actions that shouldn't happen until "later" should generally also
4907 // not happen before the first write call.
4908 this.sync = true;
4909
4910 // whenever we return null, then we set a flag to say
4911 // that we're awaiting a 'readable' event emission.
4912 this.needReadable = false;
4913 this.emittedReadable = false;
4914 this.readableListening = false;
4915
4916
4917 // object stream flag. Used to make read(n) ignore n and to
4918 // make all the buffer merging and length checks go away
4919 this.objectMode = !!options.objectMode;
4920
4921 if (stream instanceof Duplex)
4922 this.objectMode = this.objectMode || !!options.readableObjectMode;
4923
4924 // Crypto is kind of old and crusty. Historically, its default string
4925 // encoding is 'binary' so we have to make this configurable.
4926 // Everything else in the universe uses 'utf8', though.
4927 this.defaultEncoding = options.defaultEncoding || 'utf8';
4928
4929 // when piping, we only care about 'readable' events that happen
4930 // after read()ing all the bytes and not getting any pushback.
4931 this.ranOut = false;
4932
4933 // the number of writers that are awaiting a drain event in .pipe()s
4934 this.awaitDrain = 0;
4935
4936 // if true, a maybeReadMore has been scheduled
4937 this.readingMore = false;
4938
4939 this.decoder = null;
4940 this.encoding = null;
4941 if (options.encoding) {
4942 if (!StringDecoder)
4943 StringDecoder = require('string_decoder/').StringDecoder;
4944 this.decoder = new StringDecoder(options.encoding);
4945 this.encoding = options.encoding;
4946 }
4947 }
4948
4949 function Readable(options) {
4950 var Duplex = require('./_stream_duplex');
4951
4952 if (!(this instanceof Readable))
4953 return new Readable(options);
4954
4955 this._readableState = new ReadableState(options, this);
4956
4957 // legacy
4958 this.readable = true;
4959
4960 Stream.call(this);
4961 }
4962
4963 // Manually shove something into the read() buffer.
4964 // This returns true if the highWaterMark has not been hit yet,
4965 // similar to how Writable.write() returns true if you should
4966 // write() some more.
4967 Readable.prototype.push = function(chunk, encoding) {
4968 var state = this._readableState;
4969
4970 if (util.isString(chunk) && !state.objectMode) {
4971 encoding = encoding || state.defaultEncoding;
4972 if (encoding !== state.encoding) {
4973 chunk = new Buffer(chunk, encoding);
4974 encoding = '';
4975 }
4976 }
4977
4978 return readableAddChunk(this, state, chunk, encoding, false);
4979 };
4980
4981 // Unshift should *always* be something directly out of read()
4982 Readable.prototype.unshift = function(chunk) {
4983 var state = this._readableState;
4984 return readableAddChunk(this, state, chunk, '', true);
4985 };
4986
4987 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4988 var er = chunkInvalid(state, chunk);
4989 if (er) {
4990 stream.emit('error', er);
4991 } else if (util.isNullOrUndefined(chunk)) {
4992 state.reading = false;
4993 if (!state.ended)
4994 onEofChunk(stream, state);
4995 } else if (state.objectMode || chunk && chunk.length > 0) {
4996 if (state.ended && !addToFront) {
4997 var e = new Error('stream.push() after EOF');
4998 stream.emit('error', e);
4999 } else if (state.endEmitted && addToFront) {
5000 var e = new Error('stream.unshift() after end event');
5001 stream.emit('error', e);
5002 } else {
5003 if (state.decoder && !addToFront && !encoding)
5004 chunk = state.decoder.write(chunk);
5005
5006 if (!addToFront)
5007 state.reading = false;
5008
5009 // if we want the data now, just emit it.
5010 if (state.flowing && state.length === 0 && !state.sync) {
5011 stream.emit('data', chunk);
5012 stream.read(0);
5013 } else {
5014 // update the buffer info.
5015 state.length += state.objectMode ? 1 : chunk.length;
5016 if (addToFront)
5017 state.buffer.unshift(chunk);
5018 else
5019 state.buffer.push(chunk);
5020
5021 if (state.needReadable)
5022 emitReadable(stream);
5023 }
5024
5025 maybeReadMore(stream, state);
5026 }
5027 } else if (!addToFront) {
5028 state.reading = false;
5029 }
5030
5031 return needMoreData(state);
5032 }
5033
5034
5035
5036 // if it's past the high water mark, we can push in some more.
5037 // Also, if we have no data yet, we can stand some
5038 // more bytes. This is to work around cases where hwm=0,
5039 // such as the repl. Also, if the push() triggered a
5040 // readable event, and the user called read(largeNumber) such that
5041 // needReadable was set, then we ought to push more, so that another
5042 // 'readable' event will be triggered.
5043 function needMoreData(state) {
5044 return !state.ended &&
5045 (state.needReadable ||
5046 state.length < state.highWaterMark ||
5047 state.length === 0);
5048 }
5049
5050 // backwards compatibility.
5051 Readable.prototype.setEncoding = function(enc) {
5052 if (!StringDecoder)
5053 StringDecoder = require('string_decoder/').StringDecoder;
5054 this._readableState.decoder = new StringDecoder(enc);
5055 this._readableState.encoding = enc;
5056 return this;
5057 };
5058
5059 // Don't raise the hwm > 128MB
5060 var MAX_HWM = 0x800000;
5061 function roundUpToNextPowerOf2(n) {
5062 if (n >= MAX_HWM) {
5063 n = MAX_HWM;
5064 } else {
5065 // Get the next highest power of 2
5066 n--;
5067 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5068 n++;
5069 }
5070 return n;
5071 }
5072
5073 function howMuchToRead(n, state) {
5074 if (state.length === 0 && state.ended)
5075 return 0;
5076
5077 if (state.objectMode)
5078 return n === 0 ? 0 : 1;
5079
5080 if (isNaN(n) || util.isNull(n)) {
5081 // only flow one buffer at a time
5082 if (state.flowing && state.buffer.length)
5083 return state.buffer[0].length;
5084 else
5085 return state.length;
5086 }
5087
5088 if (n <= 0)
5089 return 0;
5090
5091 // If we're asking for more than the target buffer level,
5092 // then raise the water mark. Bump up to the next highest
5093 // power of 2, to prevent increasing it excessively in tiny
5094 // amounts.
5095 if (n > state.highWaterMark)
5096 state.highWaterMark = roundUpToNextPowerOf2(n);
5097
5098 // don't have that much. return null, unless we've ended.
5099 if (n > state.length) {
5100 if (!state.ended) {
5101 state.needReadable = true;
5102 return 0;
5103 } else
5104 return state.length;
5105 }
5106
5107 return n;
5108 }
5109
5110 // you can override either this method, or the async _read(n) below.
5111 Readable.prototype.read = function(n) {
5112 debug('read', n);
5113 var state = this._readableState;
5114 var nOrig = n;
5115
5116 if (!util.isNumber(n) || n > 0)
5117 state.emittedReadable = false;
5118
5119 // if we're doing read(0) to trigger a readable event, but we
5120 // already have a bunch of data in the buffer, then just trigger
5121 // the 'readable' event and move on.
5122 if (n === 0 &&
5123 state.needReadable &&
5124 (state.length >= state.highWaterMark || state.ended)) {
5125 debug('read: emitReadable', state.length, state.ended);
5126 if (state.length === 0 && state.ended)
5127 endReadable(this);
5128 else
5129 emitReadable(this);
5130 return null;
5131 }
5132
5133 n = howMuchToRead(n, state);
5134
5135 // if we've ended, and we're now clear, then finish it up.
5136 if (n === 0 && state.ended) {
5137 if (state.length === 0)
5138 endReadable(this);
5139 return null;
5140 }
5141
5142 // All the actual chunk generation logic needs to be
5143 // *below* the call to _read. The reason is that in certain
5144 // synthetic stream cases, such as passthrough streams, _read
5145 // may be a completely synchronous operation which may change
5146 // the state of the read buffer, providing enough data when
5147 // before there was *not* enough.
5148 //
5149 // So, the steps are:
5150 // 1. Figure out what the state of things will be after we do
5151 // a read from the buffer.
5152 //
5153 // 2. If that resulting state will trigger a _read, then call _read.
5154 // Note that this may be asynchronous, or synchronous. Yes, it is
5155 // deeply ugly to write APIs this way, but that still doesn't mean
5156 // that the Readable class should behave improperly, as streams are
5157 // designed to be sync/async agnostic.
5158 // Take note if the _read call is sync or async (ie, if the read call
5159 // has returned yet), so that we know whether or not it's safe to emit
5160 // 'readable' etc.
5161 //
5162 // 3. Actually pull the requested chunks out of the buffer and return.
5163
5164 // if we need a readable event, then we need to do some reading.
5165 var doRead = state.needReadable;
5166 debug('need readable', doRead);
5167
5168 // if we currently have less than the highWaterMark, then also read some
5169 if (state.length === 0 || state.length - n < state.highWaterMark) {
5170 doRead = true;
5171 debug('length less than watermark', doRead);
5172 }
5173
5174 // however, if we've ended, then there's no point, and if we're already
5175 // reading, then it's unnecessary.
5176 if (state.ended || state.reading) {
5177 doRead = false;
5178 debug('reading or ended', doRead);
5179 }
5180
5181 if (doRead) {
5182 debug('do read');
5183 state.reading = true;
5184 state.sync = true;
5185 // if the length is currently zero, then we *need* a readable event.
5186 if (state.length === 0)
5187 state.needReadable = true;
5188 // call internal read method
5189 this._read(state.highWaterMark);
5190 state.sync = false;
5191 }
5192
5193 // If _read pushed data synchronously, then `reading` will be false,
5194 // and we need to re-evaluate how much data we can return to the user.
5195 if (doRead && !state.reading)
5196 n = howMuchToRead(nOrig, state);
5197
5198 var ret;
5199 if (n > 0)
5200 ret = fromList(n, state);
5201 else
5202 ret = null;
5203
5204 if (util.isNull(ret)) {
5205 state.needReadable = true;
5206 n = 0;
5207 }
5208
5209 state.length -= n;
5210
5211 // If we have nothing in the buffer, then we want to know
5212 // as soon as we *do* get something into the buffer.
5213 if (state.length === 0 && !state.ended)
5214 state.needReadable = true;
5215
5216 // If we tried to read() past the EOF, then emit end on the next tick.
5217 if (nOrig !== n && state.ended && state.length === 0)
5218 endReadable(this);
5219
5220 if (!util.isNull(ret))
5221 this.emit('data', ret);
5222
5223 return ret;
5224 };
5225
5226 function chunkInvalid(state, chunk) {
5227 var er = null;
5228 if (!util.isBuffer(chunk) &&
5229 !util.isString(chunk) &&
5230 !util.isNullOrUndefined(chunk) &&
5231 !state.objectMode) {
5232 er = new TypeError('Invalid non-string/buffer chunk');
5233 }
5234 return er;
5235 }
5236
5237
5238 function onEofChunk(stream, state) {
5239 if (state.decoder && !state.ended) {
5240 var chunk = state.decoder.end();
5241 if (chunk && chunk.length) {
5242 state.buffer.push(chunk);
5243 state.length += state.objectMode ? 1 : chunk.length;
5244 }
5245 }
5246 state.ended = true;
5247
5248 // emit 'readable' now to make sure it gets picked up.
5249 emitReadable(stream);
5250 }
5251
5252 // Don't emit readable right away in sync mode, because this can trigger
5253 // another read() call => stack overflow. This way, it might trigger
5254 // a nextTick recursion warning, but that's not so bad.
5255 function emitReadable(stream) {
5256 var state = stream._readableState;
5257 state.needReadable = false;
5258 if (!state.emittedReadable) {
5259 debug('emitReadable', state.flowing);
5260 state.emittedReadable = true;
5261 if (state.sync)
5262 process.nextTick(function() {
5263 emitReadable_(stream);
5264 });
5265 else
5266 emitReadable_(stream);
5267 }
5268 }
5269
5270 function emitReadable_(stream) {
5271 debug('emit readable');
5272 stream.emit('readable');
5273 flow(stream);
5274 }
5275
5276
5277 // at this point, the user has presumably seen the 'readable' event,
5278 // and called read() to consume some data. that may have triggered
5279 // in turn another _read(n) call, in which case reading = true if
5280 // it's in progress.
5281 // However, if we're not ended, or reading, and the length < hwm,
5282 // then go ahead and try to read some more preemptively.
5283 function maybeReadMore(stream, state) {
5284 if (!state.readingMore) {
5285 state.readingMore = true;
5286 process.nextTick(function() {
5287 maybeReadMore_(stream, state);
5288 });
5289 }
5290 }
5291
5292 function maybeReadMore_(stream, state) {
5293 var len = state.length;
5294 while (!state.reading && !state.flowing && !state.ended &&
5295 state.length < state.highWaterMark) {
5296 debug('maybeReadMore read 0');
5297 stream.read(0);
5298 if (len === state.length)
5299 // didn't get any data, stop spinning.
5300 break;
5301 else
5302 len = state.length;
5303 }
5304 state.readingMore = false;
5305 }
5306
5307 // abstract method. to be overridden in specific implementation classes.
5308 // call cb(er, data) where data is <= n in length.
5309 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5310 // arbitrary, and perhaps not very meaningful.
5311 Readable.prototype._read = function(n) {
5312 this.emit('error', new Error('not implemented'));
5313 };
5314
5315 Readable.prototype.pipe = function(dest, pipeOpts) {
5316 var src = this;
5317 var state = this._readableState;
5318
5319 switch (state.pipesCount) {
5320 case 0:
5321 state.pipes = dest;
5322 break;
5323 case 1:
5324 state.pipes = [state.pipes, dest];
5325 break;
5326 default:
5327 state.pipes.push(dest);
5328 break;
5329 }
5330 state.pipesCount += 1;
5331 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5332
5333 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5334 dest !== process.stdout &&
5335 dest !== process.stderr;
5336
5337 var endFn = doEnd ? onend : cleanup;
5338 if (state.endEmitted)
5339 process.nextTick(endFn);
5340 else
5341 src.once('end', endFn);
5342
5343 dest.on('unpipe', onunpipe);
5344 function onunpipe(readable) {
5345 debug('onunpipe');
5346 if (readable === src) {
5347 cleanup();
5348 }
5349 }
5350
5351 function onend() {
5352 debug('onend');
5353 dest.end();
5354 }
5355
5356 // when the dest drains, it reduces the awaitDrain counter
5357 // on the source. This would be more elegant with a .once()
5358 // handler in flow(), but adding and removing repeatedly is
5359 // too slow.
5360 var ondrain = pipeOnDrain(src);
5361 dest.on('drain', ondrain);
5362
5363 function cleanup() {
5364 debug('cleanup');
5365 // cleanup event handlers once the pipe is broken
5366 dest.removeListener('close', onclose);
5367 dest.removeListener('finish', onfinish);
5368 dest.removeListener('drain', ondrain);
5369 dest.removeListener('error', onerror);
5370 dest.removeListener('unpipe', onunpipe);
5371 src.removeListener('end', onend);
5372 src.removeListener('end', cleanup);
5373 src.removeListener('data', ondata);
5374
5375 // if the reader is waiting for a drain event from this
5376 // specific writer, then it would cause it to never start
5377 // flowing again.
5378 // So, if this is awaiting a drain, then we just call it now.
5379 // If we don't know, then assume that we are waiting for one.
5380 if (state.awaitDrain &&
5381 (!dest._writableState || dest._writableState.needDrain))
5382 ondrain();
5383 }
5384
5385 src.on('data', ondata);
5386 function ondata(chunk) {
5387 debug('ondata');
5388 var ret = dest.write(chunk);
5389 if (false === ret) {
5390 debug('false write response, pause',
5391 src._readableState.awaitDrain);
5392 src._readableState.awaitDrain++;
5393 src.pause();
5394 }
5395 }
5396
5397 // if the dest has an error, then stop piping into it.
5398 // however, don't suppress the throwing behavior for this.
5399 function onerror(er) {
5400 debug('onerror', er);
5401 unpipe();
5402 dest.removeListener('error', onerror);
5403 if (EE.listenerCount(dest, 'error') === 0)
5404 dest.emit('error', er);
5405 }
5406 // This is a brutally ugly hack to make sure that our error handler
5407 // is attached before any userland ones. NEVER DO THIS.
5408 if (!dest._events || !dest._events.error)
5409 dest.on('error', onerror);
5410 else if (isArray(dest._events.error))
5411 dest._events.error.unshift(onerror);
5412 else
5413 dest._events.error = [onerror, dest._events.error];
5414
5415
5416
5417 // Both close and finish should trigger unpipe, but only once.
5418 function onclose() {
5419 dest.removeListener('finish', onfinish);
5420 unpipe();
5421 }
5422 dest.once('close', onclose);
5423 function onfinish() {
5424 debug('onfinish');
5425 dest.removeListener('close', onclose);
5426 unpipe();
5427 }
5428 dest.once('finish', onfinish);
5429
5430 function unpipe() {
5431 debug('unpipe');
5432 src.unpipe(dest);
5433 }
5434
5435 // tell the dest that it's being piped to
5436 dest.emit('pipe', src);
5437
5438 // start the flow if it hasn't been started already.
5439 if (!state.flowing) {
5440 debug('pipe resume');
5441 src.resume();
5442 }
5443
5444 return dest;
5445 };
5446
5447 function pipeOnDrain(src) {
5448 return function() {
5449 var state = src._readableState;
5450 debug('pipeOnDrain', state.awaitDrain);
5451 if (state.awaitDrain)
5452 state.awaitDrain--;
5453 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5454 state.flowing = true;
5455 flow(src);
5456 }
5457 };
5458 }
5459
5460
5461 Readable.prototype.unpipe = function(dest) {
5462 var state = this._readableState;
5463
5464 // if we're not piping anywhere, then do nothing.
5465 if (state.pipesCount === 0)
5466 return this;
5467
5468 // just one destination. most common case.
5469 if (state.pipesCount === 1) {
5470 // passed in one, but it's not the right one.
5471 if (dest && dest !== state.pipes)
5472 return this;
5473
5474 if (!dest)
5475 dest = state.pipes;
5476
5477 // got a match.
5478 state.pipes = null;
5479 state.pipesCount = 0;
5480 state.flowing = false;
5481 if (dest)
5482 dest.emit('unpipe', this);
5483 return this;
5484 }
5485
5486 // slow case. multiple pipe destinations.
5487
5488 if (!dest) {
5489 // remove all.
5490 var dests = state.pipes;
5491 var len = state.pipesCount;
5492 state.pipes = null;
5493 state.pipesCount = 0;
5494 state.flowing = false;
5495
5496 for (var i = 0; i < len; i++)
5497 dests[i].emit('unpipe', this);
5498 return this;
5499 }
5500
5501 // try to find the right one.
5502 var i = indexOf(state.pipes, dest);
5503 if (i === -1)
5504 return this;
5505
5506 state.pipes.splice(i, 1);
5507 state.pipesCount -= 1;
5508 if (state.pipesCount === 1)
5509 state.pipes = state.pipes[0];
5510
5511 dest.emit('unpipe', this);
5512
5513 return this;
5514 };
5515
5516 // set up data events if they are asked for
5517 // Ensure readable listeners eventually get something
5518 Readable.prototype.on = function(ev, fn) {
5519 var res = Stream.prototype.on.call(this, ev, fn);
5520
5521 // If listening to data, and it has not explicitly been paused,
5522 // then call resume to start the flow of data on the next tick.
5523 if (ev === 'data' && false !== this._readableState.flowing) {
5524 this.resume();
5525 }
5526
5527 if (ev === 'readable' && this.readable) {
5528 var state = this._readableState;
5529 if (!state.readableListening) {
5530 state.readableListening = true;
5531 state.emittedReadable = false;
5532 state.needReadable = true;
5533 if (!state.reading) {
5534 var self = this;
5535 process.nextTick(function() {
5536 debug('readable nexttick read 0');
5537 self.read(0);
5538 });
5539 } else if (state.length) {
5540 emitReadable(this, state);
5541 }
5542 }
5543 }
5544
5545 return res;
5546 };
5547 Readable.prototype.addListener = Readable.prototype.on;
5548
5549 // pause() and resume() are remnants of the legacy readable stream API
5550 // If the user uses them, then switch into old mode.
5551 Readable.prototype.resume = function() {
5552 var state = this._readableState;
5553 if (!state.flowing) {
5554 debug('resume');
5555 state.flowing = true;
5556 if (!state.reading) {
5557 debug('resume read 0');
5558 this.read(0);
5559 }
5560 resume(this, state);
5561 }
5562 return this;
5563 };
5564
5565 function resume(stream, state) {
5566 if (!state.resumeScheduled) {
5567 state.resumeScheduled = true;
5568 process.nextTick(function() {
5569 resume_(stream, state);
5570 });
5571 }
5572 }
5573
5574 function resume_(stream, state) {
5575 state.resumeScheduled = false;
5576 stream.emit('resume');
5577 flow(stream);
5578 if (state.flowing && !state.reading)
5579 stream.read(0);
5580 }
5581
5582 Readable.prototype.pause = function() {
5583 debug('call pause flowing=%j', this._readableState.flowing);
5584 if (false !== this._readableState.flowing) {
5585 debug('pause');
5586 this._readableState.flowing = false;
5587 this.emit('pause');
5588 }
5589 return this;
5590 };
5591
5592 function flow(stream) {
5593 var state = stream._readableState;
5594 debug('flow', state.flowing);
5595 if (state.flowing) {
5596 do {
5597 var chunk = stream.read();
5598 } while (null !== chunk && state.flowing);
5599 }
5600 }
5601
5602 // wrap an old-style stream as the async data source.
5603 // This is *not* part of the readable stream interface.
5604 // It is an ugly unfortunate mess of history.
5605 Readable.prototype.wrap = function(stream) {
5606 var state = this._readableState;
5607 var paused = false;
5608
5609 var self = this;
5610 stream.on('end', function() {
5611 debug('wrapped end');
5612 if (state.decoder && !state.ended) {
5613 var chunk = state.decoder.end();
5614 if (chunk && chunk.length)
5615 self.push(chunk);
5616 }
5617
5618 self.push(null);
5619 });
5620
5621 stream.on('data', function(chunk) {
5622 debug('wrapped data');
5623 if (state.decoder)
5624 chunk = state.decoder.write(chunk);
5625 if (!chunk || !state.objectMode && !chunk.length)
5626 return;
5627
5628 var ret = self.push(chunk);
5629 if (!ret) {
5630 paused = true;
5631 stream.pause();
5632 }
5633 });
5634
5635 // proxy all the other methods.
5636 // important when wrapping filters and duplexes.
5637 for (var i in stream) {
5638 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5639 this[i] = function(method) { return function() {
5640 return stream[method].apply(stream, arguments);
5641 }}(i);
5642 }
5643 }
5644
5645 // proxy certain important events.
5646 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5647 forEach(events, function(ev) {
5648 stream.on(ev, self.emit.bind(self, ev));
5649 });
5650
5651 // when we try to consume some more bytes, simply unpause the
5652 // underlying stream.
5653 self._read = function(n) {
5654 debug('wrapped _read', n);
5655 if (paused) {
5656 paused = false;
5657 stream.resume();
5658 }
5659 };
5660
5661 return self;
5662 };
5663
5664
5665
5666 // exposed for testing purposes only.
5667 Readable._fromList = fromList;
5668
5669 // Pluck off n bytes from an array of buffers.
5670 // Length is the combined lengths of all the buffers in the list.
5671 function fromList(n, state) {
5672 var list = state.buffer;
5673 var length = state.length;
5674 var stringMode = !!state.decoder;
5675 var objectMode = !!state.objectMode;
5676 var ret;
5677
5678 // nothing in the list, definitely empty.
5679 if (list.length === 0)
5680 return null;
5681
5682 if (length === 0)
5683 ret = null;
5684 else if (objectMode)
5685 ret = list.shift();
5686 else if (!n || n >= length) {
5687 // read it all, truncate the array.
5688 if (stringMode)
5689 ret = list.join('');
5690 else
5691 ret = Buffer.concat(list, length);
5692 list.length = 0;
5693 } else {
5694 // read just some of it.
5695 if (n < list[0].length) {
5696 // just take a part of the first list item.
5697 // slice is the same for buffers and strings.
5698 var buf = list[0];
5699 ret = buf.slice(0, n);
5700 list[0] = buf.slice(n);
5701 } else if (n === list[0].length) {
5702 // first list is a perfect match
5703 ret = list.shift();
5704 } else {
5705 // complex case.
5706 // we have enough to cover it, but it spans past the first buffer.
5707 if (stringMode)
5708 ret = '';
5709 else
5710 ret = new Buffer(n);
5711
5712 var c = 0;
5713 for (var i = 0, l = list.length; i < l && c < n; i++) {
5714 var buf = list[0];
5715 var cpy = Math.min(n - c, buf.length);
5716
5717 if (stringMode)
5718 ret += buf.slice(0, cpy);
5719 else
5720 buf.copy(ret, c, 0, cpy);
5721
5722 if (cpy < buf.length)
5723 list[0] = buf.slice(cpy);
5724 else
5725 list.shift();
5726
5727 c += cpy;
5728 }
5729 }
5730 }
5731
5732 return ret;
5733 }
5734
5735 function endReadable(stream) {
5736 var state = stream._readableState;
5737
5738 // If we get here before consuming all the bytes, then that is a
5739 // bug in node. Should never happen.
5740 if (state.length > 0)
5741 throw new Error('endReadable called on non-empty stream');
5742
5743 if (!state.endEmitted) {
5744 state.ended = true;
5745 process.nextTick(function() {
5746 // Check that we didn't get one last unshift.
5747 if (!state.endEmitted && state.length === 0) {
5748 state.endEmitted = true;
5749 stream.readable = false;
5750 stream.emit('end');
5751 }
5752 });
5753 }
5754 }
5755
5756 function forEach (xs, f) {
5757 for (var i = 0, l = xs.length; i < l; i++) {
5758 f(xs[i], i);
5759 }
5760 }
5761
5762 function indexOf (xs, x) {
5763 for (var i = 0, l = xs.length; i < l; i++) {
5764 if (xs[i] === x) return i;
5765 }
5766 return -1;
5767 }
5768
5769 }).call(this,require('_process'))
5770 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
5771 // Copyright Joyent, Inc. and other Node contributors.
5772 //
5773 // Permission is hereby granted, free of charge, to any person obtaining a
5774 // copy of this software and associated documentation files (the
5775 // "Software"), to deal in the Software without restriction, including
5776 // without limitation the rights to use, copy, modify, merge, publish,
5777 // distribute, sublicense, and/or sell copies of the Software, and to permit
5778 // persons to whom the Software is furnished to do so, subject to the
5779 // following conditions:
5780 //
5781 // The above copyright notice and this permission notice shall be included
5782 // in all copies or substantial portions of the Software.
5783 //
5784 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5785 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5786 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5787 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5788 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5789 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5790 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5791
5792
5793 // a transform stream is a readable/writable stream where you do
5794 // something with the data. Sometimes it's called a "filter",
5795 // but that's not a great name for it, since that implies a thing where
5796 // some bits pass through, and others are simply ignored. (That would
5797 // be a valid example of a transform, of course.)
5798 //
5799 // While the output is causally related to the input, it's not a
5800 // necessarily symmetric or synchronous transformation. For example,
5801 // a zlib stream might take multiple plain-text writes(), and then
5802 // emit a single compressed chunk some time in the future.
5803 //
5804 // Here's how this works:
5805 //
5806 // The Transform stream has all the aspects of the readable and writable
5807 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5808 // internally, and returns false if there's a lot of pending writes
5809 // buffered up. When you call read(), that calls _read(n) until
5810 // there's enough pending readable data buffered up.
5811 //
5812 // In a transform stream, the written data is placed in a buffer. When
5813 // _read(n) is called, it transforms the queued up data, calling the
5814 // buffered _write cb's as it consumes chunks. If consuming a single
5815 // written chunk would result in multiple output chunks, then the first
5816 // outputted bit calls the readcb, and subsequent chunks just go into
5817 // the read buffer, and will cause it to emit 'readable' if necessary.
5818 //
5819 // This way, back-pressure is actually determined by the reading side,
5820 // since _read has to be called to start processing a new chunk. However,
5821 // a pathological inflate type of transform can cause excessive buffering
5822 // here. For example, imagine a stream where every byte of input is
5823 // interpreted as an integer from 0-255, and then results in that many
5824 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5825 // 1kb of data being output. In this case, you could write a very small
5826 // amount of input, and end up with a very large amount of output. In
5827 // such a pathological inflating mechanism, there'd be no way to tell
5828 // the system to stop doing the transform. A single 4MB write could
5829 // cause the system to run out of memory.
5830 //
5831 // However, even in such a pathological case, only a single written chunk
5832 // would be consumed, and then the rest would wait (un-transformed) until
5833 // the results of the previous transformed chunk were consumed.
5834
5835 module.exports = Transform;
5836
5837 var Duplex = require('./_stream_duplex');
5838
5839 /*<replacement>*/
5840 var util = require('core-util-is');
5841 util.inherits = require('inherits');
5842 /*</replacement>*/
5843
5844 util.inherits(Transform, Duplex);
5845
5846
5847 function TransformState(options, stream) {
5848 this.afterTransform = function(er, data) {
5849 return afterTransform(stream, er, data);
5850 };
5851
5852 this.needTransform = false;
5853 this.transforming = false;
5854 this.writecb = null;
5855 this.writechunk = null;
5856 }
5857
5858 function afterTransform(stream, er, data) {
5859 var ts = stream._transformState;
5860 ts.transforming = false;
5861
5862 var cb = ts.writecb;
5863
5864 if (!cb)
5865 return stream.emit('error', new Error('no writecb in Transform class'));
5866
5867 ts.writechunk = null;
5868 ts.writecb = null;
5869
5870 if (!util.isNullOrUndefined(data))
5871 stream.push(data);
5872
5873 if (cb)
5874 cb(er);
5875
5876 var rs = stream._readableState;
5877 rs.reading = false;
5878 if (rs.needReadable || rs.length < rs.highWaterMark) {
5879 stream._read(rs.highWaterMark);
5880 }
5881 }
5882
5883
5884 function Transform(options) {
5885 if (!(this instanceof Transform))
5886 return new Transform(options);
5887
5888 Duplex.call(this, options);
5889
5890 this._transformState = new TransformState(options, this);
5891
5892 // when the writable side finishes, then flush out anything remaining.
5893 var stream = this;
5894
5895 // start out asking for a readable event once data is transformed.
5896 this._readableState.needReadable = true;
5897
5898 // we have implemented the _read method, and done the other things
5899 // that Readable wants before the first _read call, so unset the
5900 // sync guard flag.
5901 this._readableState.sync = false;
5902
5903 this.once('prefinish', function() {
5904 if (util.isFunction(this._flush))
5905 this._flush(function(er) {
5906 done(stream, er);
5907 });
5908 else
5909 done(stream);
5910 });
5911 }
5912
5913 Transform.prototype.push = function(chunk, encoding) {
5914 this._transformState.needTransform = false;
5915 return Duplex.prototype.push.call(this, chunk, encoding);
5916 };
5917
5918 // This is the part where you do stuff!
5919 // override this function in implementation classes.
5920 // 'chunk' is an input chunk.
5921 //
5922 // Call `push(newChunk)` to pass along transformed output
5923 // to the readable side. You may call 'push' zero or more times.
5924 //
5925 // Call `cb(err)` when you are done with this chunk. If you pass
5926 // an error, then that'll put the hurt on the whole operation. If you
5927 // never call cb(), then you'll never get another chunk.
5928 Transform.prototype._transform = function(chunk, encoding, cb) {
5929 throw new Error('not implemented');
5930 };
5931
5932 Transform.prototype._write = function(chunk, encoding, cb) {
5933 var ts = this._transformState;
5934 ts.writecb = cb;
5935 ts.writechunk = chunk;
5936 ts.writeencoding = encoding;
5937 if (!ts.transforming) {
5938 var rs = this._readableState;
5939 if (ts.needTransform ||
5940 rs.needReadable ||
5941 rs.length < rs.highWaterMark)
5942 this._read(rs.highWaterMark);
5943 }
5944 };
5945
5946 // Doesn't matter what the args are here.
5947 // _transform does all the work.
5948 // That we got here means that the readable side wants more data.
5949 Transform.prototype._read = function(n) {
5950 var ts = this._transformState;
5951
5952 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5953 ts.transforming = true;
5954 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5955 } else {
5956 // mark that we need a transform, so that any data that comes in
5957 // will get processed, now that we've asked for it.
5958 ts.needTransform = true;
5959 }
5960 };
5961
5962
5963 function done(stream, er) {
5964 if (er)
5965 return stream.emit('error', er);
5966
5967 // if there's nothing in the write buffer, then that means
5968 // that nothing more will ever be provided
5969 var ws = stream._writableState;
5970 var ts = stream._transformState;
5971
5972 if (ws.length)
5973 throw new Error('calling transform done when ws.length != 0');
5974
5975 if (ts.transforming)
5976 throw new Error('calling transform done when still transforming');
5977
5978 return stream.push(null);
5979 }
5980
5981 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5982 (function (process){
5983 // Copyright Joyent, Inc. and other Node contributors.
5984 //
5985 // Permission is hereby granted, free of charge, to any person obtaining a
5986 // copy of this software and associated documentation files (the
5987 // "Software"), to deal in the Software without restriction, including
5988 // without limitation the rights to use, copy, modify, merge, publish,
5989 // distribute, sublicense, and/or sell copies of the Software, and to permit
5990 // persons to whom the Software is furnished to do so, subject to the
5991 // following conditions:
5992 //
5993 // The above copyright notice and this permission notice shall be included
5994 // in all copies or substantial portions of the Software.
5995 //
5996 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5997 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5998 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5999 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6000 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6001 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6002 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6003
6004 // A bit simpler than readable streams.
6005 // Implement an async ._write(chunk, cb), and it'll handle all
6006 // the drain event emission and buffering.
6007
6008 module.exports = Writable;
6009
6010 /*<replacement>*/
6011 var Buffer = require('buffer').Buffer;
6012 /*</replacement>*/
6013
6014 Writable.WritableState = WritableState;
6015
6016
6017 /*<replacement>*/
6018 var util = require('core-util-is');
6019 util.inherits = require('inherits');
6020 /*</replacement>*/
6021
6022 var Stream = require('stream');
6023
6024 util.inherits(Writable, Stream);
6025
6026 function WriteReq(chunk, encoding, cb) {
6027 this.chunk = chunk;
6028 this.encoding = encoding;
6029 this.callback = cb;
6030 }
6031
6032 function WritableState(options, stream) {
6033 var Duplex = require('./_stream_duplex');
6034
6035 options = options || {};
6036
6037 // the point at which write() starts returning false
6038 // Note: 0 is a valid value, means that we always return false if
6039 // the entire buffer is not flushed immediately on write()
6040 var hwm = options.highWaterMark;
6041 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6042 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6043
6044 // object stream flag to indicate whether or not this stream
6045 // contains buffers or objects.
6046 this.objectMode = !!options.objectMode;
6047
6048 if (stream instanceof Duplex)
6049 this.objectMode = this.objectMode || !!options.writableObjectMode;
6050
6051 // cast to ints.
6052 this.highWaterMark = ~~this.highWaterMark;
6053
6054 this.needDrain = false;
6055 // at the start of calling end()
6056 this.ending = false;
6057 // when end() has been called, and returned
6058 this.ended = false;
6059 // when 'finish' is emitted
6060 this.finished = false;
6061
6062 // should we decode strings into buffers before passing to _write?
6063 // this is here so that some node-core streams can optimize string
6064 // handling at a lower level.
6065 var noDecode = options.decodeStrings === false;
6066 this.decodeStrings = !noDecode;
6067
6068 // Crypto is kind of old and crusty. Historically, its default string
6069 // encoding is 'binary' so we have to make this configurable.
6070 // Everything else in the universe uses 'utf8', though.
6071 this.defaultEncoding = options.defaultEncoding || 'utf8';
6072
6073 // not an actual buffer we keep track of, but a measurement
6074 // of how much we're waiting to get pushed to some underlying
6075 // socket or file.
6076 this.length = 0;
6077
6078 // a flag to see when we're in the middle of a write.
6079 this.writing = false;
6080
6081 // when true all writes will be buffered until .uncork() call
6082 this.corked = 0;
6083
6084 // a flag to be able to tell if the onwrite cb is called immediately,
6085 // or on a later tick. We set this to true at first, because any
6086 // actions that shouldn't happen until "later" should generally also
6087 // not happen before the first write call.
6088 this.sync = true;
6089
6090 // a flag to know if we're processing previously buffered items, which
6091 // may call the _write() callback in the same tick, so that we don't
6092 // end up in an overlapped onwrite situation.
6093 this.bufferProcessing = false;
6094
6095 // the callback that's passed to _write(chunk,cb)
6096 this.onwrite = function(er) {
6097 onwrite(stream, er);
6098 };
6099
6100 // the callback that the user supplies to write(chunk,encoding,cb)
6101 this.writecb = null;
6102
6103 // the amount that is being written when _write is called.
6104 this.writelen = 0;
6105
6106 this.buffer = [];
6107
6108 // number of pending user-supplied write callbacks
6109 // this must be 0 before 'finish' can be emitted
6110 this.pendingcb = 0;
6111
6112 // emit prefinish if the only thing we're waiting for is _write cbs
6113 // This is relevant for synchronous Transform streams
6114 this.prefinished = false;
6115
6116 // True if the error was already emitted and should not be thrown again
6117 this.errorEmitted = false;
6118 }
6119
6120 function Writable(options) {
6121 var Duplex = require('./_stream_duplex');
6122
6123 // Writable ctor is applied to Duplexes, though they're not
6124 // instanceof Writable, they're instanceof Readable.
6125 if (!(this instanceof Writable) && !(this instanceof Duplex))
6126 return new Writable(options);
6127
6128 this._writableState = new WritableState(options, this);
6129
6130 // legacy.
6131 this.writable = true;
6132
6133 Stream.call(this);
6134 }
6135
6136 // Otherwise people can pipe Writable streams, which is just wrong.
6137 Writable.prototype.pipe = function() {
6138 this.emit('error', new Error('Cannot pipe. Not readable.'));
6139 };
6140
6141
6142 function writeAfterEnd(stream, state, cb) {
6143 var er = new Error('write after end');
6144 // TODO: defer error events consistently everywhere, not just the cb
6145 stream.emit('error', er);
6146 process.nextTick(function() {
6147 cb(er);
6148 });
6149 }
6150
6151 // If we get something that is not a buffer, string, null, or undefined,
6152 // and we're not in objectMode, then that's an error.
6153 // Otherwise stream chunks are all considered to be of length=1, and the
6154 // watermarks determine how many objects to keep in the buffer, rather than
6155 // how many bytes or characters.
6156 function validChunk(stream, state, chunk, cb) {
6157 var valid = true;
6158 if (!util.isBuffer(chunk) &&
6159 !util.isString(chunk) &&
6160 !util.isNullOrUndefined(chunk) &&
6161 !state.objectMode) {
6162 var er = new TypeError('Invalid non-string/buffer chunk');
6163 stream.emit('error', er);
6164 process.nextTick(function() {
6165 cb(er);
6166 });
6167 valid = false;
6168 }
6169 return valid;
6170 }
6171
6172 Writable.prototype.write = function(chunk, encoding, cb) {
6173 var state = this._writableState;
6174 var ret = false;
6175
6176 if (util.isFunction(encoding)) {
6177 cb = encoding;
6178 encoding = null;
6179 }
6180
6181 if (util.isBuffer(chunk))
6182 encoding = 'buffer';
6183 else if (!encoding)
6184 encoding = state.defaultEncoding;
6185
6186 if (!util.isFunction(cb))
6187 cb = function() {};
6188
6189 if (state.ended)
6190 writeAfterEnd(this, state, cb);
6191 else if (validChunk(this, state, chunk, cb)) {
6192 state.pendingcb++;
6193 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6194 }
6195
6196 return ret;
6197 };
6198
6199 Writable.prototype.cork = function() {
6200 var state = this._writableState;
6201
6202 state.corked++;
6203 };
6204
6205 Writable.prototype.uncork = function() {
6206 var state = this._writableState;
6207
6208 if (state.corked) {
6209 state.corked--;
6210
6211 if (!state.writing &&
6212 !state.corked &&
6213 !state.finished &&
6214 !state.bufferProcessing &&
6215 state.buffer.length)
6216 clearBuffer(this, state);
6217 }
6218 };
6219
6220 function decodeChunk(state, chunk, encoding) {
6221 if (!state.objectMode &&
6222 state.decodeStrings !== false &&
6223 util.isString(chunk)) {
6224 chunk = new Buffer(chunk, encoding);
6225 }
6226 return chunk;
6227 }
6228
6229 // if we're already writing something, then just put this
6230 // in the queue, and wait our turn. Otherwise, call _write
6231 // If we return false, then we need a drain event, so set that flag.
6232 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6233 chunk = decodeChunk(state, chunk, encoding);
6234 if (util.isBuffer(chunk))
6235 encoding = 'buffer';
6236 var len = state.objectMode ? 1 : chunk.length;
6237
6238 state.length += len;
6239
6240 var ret = state.length < state.highWaterMark;
6241 // we must ensure that previous needDrain will not be reset to false.
6242 if (!ret)
6243 state.needDrain = true;
6244
6245 if (state.writing || state.corked)
6246 state.buffer.push(new WriteReq(chunk, encoding, cb));
6247 else
6248 doWrite(stream, state, false, len, chunk, encoding, cb);
6249
6250 return ret;
6251 }
6252
6253 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6254 state.writelen = len;
6255 state.writecb = cb;
6256 state.writing = true;
6257 state.sync = true;
6258 if (writev)
6259 stream._writev(chunk, state.onwrite);
6260 else
6261 stream._write(chunk, encoding, state.onwrite);
6262 state.sync = false;
6263 }
6264
6265 function onwriteError(stream, state, sync, er, cb) {
6266 if (sync)
6267 process.nextTick(function() {
6268 state.pendingcb--;
6269 cb(er);
6270 });
6271 else {
6272 state.pendingcb--;
6273 cb(er);
6274 }
6275
6276 stream._writableState.errorEmitted = true;
6277 stream.emit('error', er);
6278 }
6279
6280 function onwriteStateUpdate(state) {
6281 state.writing = false;
6282 state.writecb = null;
6283 state.length -= state.writelen;
6284 state.writelen = 0;
6285 }
6286
6287 function onwrite(stream, er) {
6288 var state = stream._writableState;
6289 var sync = state.sync;
6290 var cb = state.writecb;
6291
6292 onwriteStateUpdate(state);
6293
6294 if (er)
6295 onwriteError(stream, state, sync, er, cb);
6296 else {
6297 // Check if we're actually ready to finish, but don't emit yet
6298 var finished = needFinish(stream, state);
6299
6300 if (!finished &&
6301 !state.corked &&
6302 !state.bufferProcessing &&
6303 state.buffer.length) {
6304 clearBuffer(stream, state);
6305 }
6306
6307 if (sync) {
6308 process.nextTick(function() {
6309 afterWrite(stream, state, finished, cb);
6310 });
6311 } else {
6312 afterWrite(stream, state, finished, cb);
6313 }
6314 }
6315 }
6316
6317 function afterWrite(stream, state, finished, cb) {
6318 if (!finished)
6319 onwriteDrain(stream, state);
6320 state.pendingcb--;
6321 cb();
6322 finishMaybe(stream, state);
6323 }
6324
6325 // Must force callback to be called on nextTick, so that we don't
6326 // emit 'drain' before the write() consumer gets the 'false' return
6327 // value, and has a chance to attach a 'drain' listener.
6328 function onwriteDrain(stream, state) {
6329 if (state.length === 0 && state.needDrain) {
6330 state.needDrain = false;
6331 stream.emit('drain');
6332 }
6333 }
6334
6335
6336 // if there's something in the buffer waiting, then process it
6337 function clearBuffer(stream, state) {
6338 state.bufferProcessing = true;
6339
6340 if (stream._writev && state.buffer.length > 1) {
6341 // Fast case, write everything using _writev()
6342 var cbs = [];
6343 for (var c = 0; c < state.buffer.length; c++)
6344 cbs.push(state.buffer[c].callback);
6345
6346 // count the one we are adding, as well.
6347 // TODO(isaacs) clean this up
6348 state.pendingcb++;
6349 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6350 for (var i = 0; i < cbs.length; i++) {
6351 state.pendingcb--;
6352 cbs[i](err);
6353 }
6354 });
6355
6356 // Clear buffer
6357 state.buffer = [];
6358 } else {
6359 // Slow case, write chunks one-by-one
6360 for (var c = 0; c < state.buffer.length; c++) {
6361 var entry = state.buffer[c];
6362 var chunk = entry.chunk;
6363 var encoding = entry.encoding;
6364 var cb = entry.callback;
6365 var len = state.objectMode ? 1 : chunk.length;
6366
6367 doWrite(stream, state, false, len, chunk, encoding, cb);
6368
6369 // if we didn't call the onwrite immediately, then
6370 // it means that we need to wait until it does.
6371 // also, that means that the chunk and cb are currently
6372 // being processed, so move the buffer counter past them.
6373 if (state.writing) {
6374 c++;
6375 break;
6376 }
6377 }
6378
6379 if (c < state.buffer.length)
6380 state.buffer = state.buffer.slice(c);
6381 else
6382 state.buffer.length = 0;
6383 }
6384
6385 state.bufferProcessing = false;
6386 }
6387
6388 Writable.prototype._write = function(chunk, encoding, cb) {
6389 cb(new Error('not implemented'));
6390
6391 };
6392
6393 Writable.prototype._writev = null;
6394
6395 Writable.prototype.end = function(chunk, encoding, cb) {
6396 var state = this._writableState;
6397
6398 if (util.isFunction(chunk)) {
6399 cb = chunk;
6400 chunk = null;
6401 encoding = null;
6402 } else if (util.isFunction(encoding)) {
6403 cb = encoding;
6404 encoding = null;
6405 }
6406
6407 if (!util.isNullOrUndefined(chunk))
6408 this.write(chunk, encoding);
6409
6410 // .end() fully uncorks
6411 if (state.corked) {
6412 state.corked = 1;
6413 this.uncork();
6414 }
6415
6416 // ignore unnecessary end() calls.
6417 if (!state.ending && !state.finished)
6418 endWritable(this, state, cb);
6419 };
6420
6421
6422 function needFinish(stream, state) {
6423 return (state.ending &&
6424 state.length === 0 &&
6425 !state.finished &&
6426 !state.writing);
6427 }
6428
6429 function prefinish(stream, state) {
6430 if (!state.prefinished) {
6431 state.prefinished = true;
6432 stream.emit('prefinish');
6433 }
6434 }
6435
6436 function finishMaybe(stream, state) {
6437 var need = needFinish(stream, state);
6438 if (need) {
6439 if (state.pendingcb === 0) {
6440 prefinish(stream, state);
6441 state.finished = true;
6442 stream.emit('finish');
6443 } else
6444 prefinish(stream, state);
6445 }
6446 return need;
6447 }
6448
6449 function endWritable(stream, state, cb) {
6450 state.ending = true;
6451 finishMaybe(stream, state);
6452 if (cb) {
6453 if (state.finished)
6454 process.nextTick(cb);
6455 else
6456 stream.once('finish', cb);
6457 }
6458 state.ended = true;
6459 }
6460
6461 }).call(this,require('_process'))
6462 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6463 (function (Buffer){
6464 // Copyright Joyent, Inc. and other Node contributors.
6465 //
6466 // Permission is hereby granted, free of charge, to any person obtaining a
6467 // copy of this software and associated documentation files (the
6468 // "Software"), to deal in the Software without restriction, including
6469 // without limitation the rights to use, copy, modify, merge, publish,
6470 // distribute, sublicense, and/or sell copies of the Software, and to permit
6471 // persons to whom the Software is furnished to do so, subject to the
6472 // following conditions:
6473 //
6474 // The above copyright notice and this permission notice shall be included
6475 // in all copies or substantial portions of the Software.
6476 //
6477 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6478 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6479 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6480 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6481 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6482 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6483 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6484
6485 // NOTE: These type checking functions intentionally don't use `instanceof`
6486 // because it is fragile and can be easily faked with `Object.create()`.
6487 function isArray(ar) {
6488 return Array.isArray(ar);
6489 }
6490 exports.isArray = isArray;
6491
6492 function isBoolean(arg) {
6493 return typeof arg === 'boolean';
6494 }
6495 exports.isBoolean = isBoolean;
6496
6497 function isNull(arg) {
6498 return arg === null;
6499 }
6500 exports.isNull = isNull;
6501
6502 function isNullOrUndefined(arg) {
6503 return arg == null;
6504 }
6505 exports.isNullOrUndefined = isNullOrUndefined;
6506
6507 function isNumber(arg) {
6508 return typeof arg === 'number';
6509 }
6510 exports.isNumber = isNumber;
6511
6512 function isString(arg) {
6513 return typeof arg === 'string';
6514 }
6515 exports.isString = isString;
6516
6517 function isSymbol(arg) {
6518 return typeof arg === 'symbol';
6519 }
6520 exports.isSymbol = isSymbol;
6521
6522 function isUndefined(arg) {
6523 return arg === void 0;
6524 }
6525 exports.isUndefined = isUndefined;
6526
6527 function isRegExp(re) {
6528 return isObject(re) && objectToString(re) === '[object RegExp]';
6529 }
6530 exports.isRegExp = isRegExp;
6531
6532 function isObject(arg) {
6533 return typeof arg === 'object' && arg !== null;
6534 }
6535 exports.isObject = isObject;
6536
6537 function isDate(d) {
6538 return isObject(d) && objectToString(d) === '[object Date]';
6539 }
6540 exports.isDate = isDate;
6541
6542 function isError(e) {
6543 return isObject(e) &&
6544 (objectToString(e) === '[object Error]' || e instanceof Error);
6545 }
6546 exports.isError = isError;
6547
6548 function isFunction(arg) {
6549 return typeof arg === 'function';
6550 }
6551 exports.isFunction = isFunction;
6552
6553 function isPrimitive(arg) {
6554 return arg === null ||
6555 typeof arg === 'boolean' ||
6556 typeof arg === 'number' ||
6557 typeof arg === 'string' ||
6558 typeof arg === 'symbol' || // ES6 symbol
6559 typeof arg === 'undefined';
6560 }
6561 exports.isPrimitive = isPrimitive;
6562
6563 function isBuffer(arg) {
6564 return Buffer.isBuffer(arg);
6565 }
6566 exports.isBuffer = isBuffer;
6567
6568 function objectToString(o) {
6569 return Object.prototype.toString.call(o);
6570 }
6571 }).call(this,require("buffer").Buffer)
6572 },{"buffer":7}],22:[function(require,module,exports){
6573 module.exports = require("./lib/_stream_passthrough.js")
6574
6575 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6576 exports = module.exports = require('./lib/_stream_readable.js');
6577 exports.Stream = require('stream');
6578 exports.Readable = exports;
6579 exports.Writable = require('./lib/_stream_writable.js');
6580 exports.Duplex = require('./lib/_stream_duplex.js');
6581 exports.Transform = require('./lib/_stream_transform.js');
6582 exports.PassThrough = require('./lib/_stream_passthrough.js');
6583
6584 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
6585 module.exports = require("./lib/_stream_transform.js")
6586
6587 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6588 module.exports = require("./lib/_stream_writable.js")
6589
6590 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6591 // Copyright Joyent, Inc. and other Node contributors.
6592 //
6593 // Permission is hereby granted, free of charge, to any person obtaining a
6594 // copy of this software and associated documentation files (the
6595 // "Software"), to deal in the Software without restriction, including
6596 // without limitation the rights to use, copy, modify, merge, publish,
6597 // distribute, sublicense, and/or sell copies of the Software, and to permit
6598 // persons to whom the Software is furnished to do so, subject to the
6599 // following conditions:
6600 //
6601 // The above copyright notice and this permission notice shall be included
6602 // in all copies or substantial portions of the Software.
6603 //
6604 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6605 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6606 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6607 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6608 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6609 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6610 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6611
6612 module.exports = Stream;
6613
6614 var EE = require('events').EventEmitter;
6615 var inherits = require('inherits');
6616
6617 inherits(Stream, EE);
6618 Stream.Readable = require('readable-stream/readable.js');
6619 Stream.Writable = require('readable-stream/writable.js');
6620 Stream.Duplex = require('readable-stream/duplex.js');
6621 Stream.Transform = require('readable-stream/transform.js');
6622 Stream.PassThrough = require('readable-stream/passthrough.js');
6623
6624 // Backwards-compat with node 0.4.x
6625 Stream.Stream = Stream;
6626
6627
6628
6629 // old-style streams. Note that the pipe method (the only relevant
6630 // part of this class) is overridden in the Readable class.
6631
6632 function Stream() {
6633 EE.call(this);
6634 }
6635
6636 Stream.prototype.pipe = function(dest, options) {
6637 var source = this;
6638
6639 function ondata(chunk) {
6640 if (dest.writable) {
6641 if (false === dest.write(chunk) && source.pause) {
6642 source.pause();
6643 }
6644 }
6645 }
6646
6647 source.on('data', ondata);
6648
6649 function ondrain() {
6650 if (source.readable && source.resume) {
6651 source.resume();
6652 }
6653 }
6654
6655 dest.on('drain', ondrain);
6656
6657 // If the 'end' option is not supplied, dest.end() will be called when
6658 // source gets the 'end' or 'close' events. Only dest.end() once.
6659 if (!dest._isStdio && (!options || options.end !== false)) {
6660 source.on('end', onend);
6661 source.on('close', onclose);
6662 }
6663
6664 var didOnEnd = false;
6665 function onend() {
6666 if (didOnEnd) return;
6667 didOnEnd = true;
6668
6669 dest.end();
6670 }
6671
6672
6673 function onclose() {
6674 if (didOnEnd) return;
6675 didOnEnd = true;
6676
6677 if (typeof dest.destroy === 'function') dest.destroy();
6678 }
6679
6680 // don't leave dangling pipes when there are errors.
6681 function onerror(er) {
6682 cleanup();
6683 if (EE.listenerCount(this, 'error') === 0) {
6684 throw er; // Unhandled stream error in pipe.
6685 }
6686 }
6687
6688 source.on('error', onerror);
6689 dest.on('error', onerror);
6690
6691 // remove all the event listeners that were added.
6692 function cleanup() {
6693 source.removeListener('data', ondata);
6694 dest.removeListener('drain', ondrain);
6695
6696 source.removeListener('end', onend);
6697 source.removeListener('close', onclose);
6698
6699 source.removeListener('error', onerror);
6700 dest.removeListener('error', onerror);
6701
6702 source.removeListener('end', cleanup);
6703 source.removeListener('close', cleanup);
6704
6705 dest.removeListener('close', cleanup);
6706 }
6707
6708 source.on('end', cleanup);
6709 source.on('close', cleanup);
6710
6711 dest.on('close', cleanup);
6712
6713 dest.emit('pipe', source);
6714
6715 // Allow for unix-like usage: A.pipe(B).pipe(C)
6716 return dest;
6717 };
6718
6719 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
6720 // Copyright Joyent, Inc. and other Node contributors.
6721 //
6722 // Permission is hereby granted, free of charge, to any person obtaining a
6723 // copy of this software and associated documentation files (the
6724 // "Software"), to deal in the Software without restriction, including
6725 // without limitation the rights to use, copy, modify, merge, publish,
6726 // distribute, sublicense, and/or sell copies of the Software, and to permit
6727 // persons to whom the Software is furnished to do so, subject to the
6728 // following conditions:
6729 //
6730 // The above copyright notice and this permission notice shall be included
6731 // in all copies or substantial portions of the Software.
6732 //
6733 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6734 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6735 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6736 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6737 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6738 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6739 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6740
6741 var Buffer = require('buffer').Buffer;
6742
6743 var isBufferEncoding = Buffer.isEncoding
6744 || function(encoding) {
6745 switch (encoding && encoding.toLowerCase()) {
6746 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
6747 default: return false;
6748 }
6749 }
6750
6751
6752 function assertEncoding(encoding) {
6753 if (encoding && !isBufferEncoding(encoding)) {
6754 throw new Error('Unknown encoding: ' + encoding);
6755 }
6756 }
6757
6758 // StringDecoder provides an interface for efficiently splitting a series of
6759 // buffers into a series of JS strings without breaking apart multi-byte
6760 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6761 //
6762 // @TODO Handling all encodings inside a single object makes it very difficult
6763 // to reason about this code, so it should be split up in the future.
6764 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6765 // points as used by CESU-8.
6766 var StringDecoder = exports.StringDecoder = function(encoding) {
6767 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6768 assertEncoding(encoding);
6769 switch (this.encoding) {
6770 case 'utf8':
6771 // CESU-8 represents each of Surrogate Pair by 3-bytes
6772 this.surrogateSize = 3;
6773 break;
6774 case 'ucs2':
6775 case 'utf16le':
6776 // UTF-16 represents each of Surrogate Pair by 2-bytes
6777 this.surrogateSize = 2;
6778 this.detectIncompleteChar = utf16DetectIncompleteChar;
6779 break;
6780 case 'base64':
6781 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6782 this.surrogateSize = 3;
6783 this.detectIncompleteChar = base64DetectIncompleteChar;
6784 break;
6785 default:
6786 this.write = passThroughWrite;
6787 return;
6788 }
6789
6790 // Enough space to store all bytes of a single character. UTF-8 needs 4
6791 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6792 this.charBuffer = new Buffer(6);
6793 // Number of bytes received for the current incomplete multi-byte character.
6794 this.charReceived = 0;
6795 // Number of bytes expected for the current incomplete multi-byte character.
6796 this.charLength = 0;
6797 };
6798
6799
6800 // write decodes the given buffer and returns it as JS string that is
6801 // guaranteed to not contain any partial multi-byte characters. Any partial
6802 // character found at the end of the buffer is buffered up, and will be
6803 // returned when calling write again with the remaining bytes.
6804 //
6805 // Note: Converting a Buffer containing an orphan surrogate to a String
6806 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6807 // Buffer#write) will replace incomplete surrogates with the unicode
6808 // replacement character. See https://codereview.chromium.org/121173009/ .
6809 StringDecoder.prototype.write = function(buffer) {
6810 var charStr = '';
6811 // if our last write ended with an incomplete multibyte character
6812 while (this.charLength) {
6813 // determine how many remaining bytes this buffer has to offer for this char
6814 var available = (buffer.length >= this.charLength - this.charReceived) ?
6815 this.charLength - this.charReceived :
6816 buffer.length;
6817
6818 // add the new bytes to the char buffer
6819 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6820 this.charReceived += available;
6821
6822 if (this.charReceived < this.charLength) {
6823 // still not enough chars in this buffer? wait for more ...
6824 return '';
6825 }
6826
6827 // remove bytes belonging to the current character from the buffer
6828 buffer = buffer.slice(available, buffer.length);
6829
6830 // get the character that was split
6831 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6832
6833 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6834 var charCode = charStr.charCodeAt(charStr.length - 1);
6835 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6836 this.charLength += this.surrogateSize;
6837 charStr = '';
6838 continue;
6839 }
6840 this.charReceived = this.charLength = 0;
6841
6842 // if there are no more bytes in this buffer, just emit our char
6843 if (buffer.length === 0) {
6844 return charStr;
6845 }
6846 break;
6847 }
6848
6849 // determine and set charLength / charReceived
6850 this.detectIncompleteChar(buffer);
6851
6852 var end = buffer.length;
6853 if (this.charLength) {
6854 // buffer the incomplete character bytes we got
6855 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6856 end -= this.charReceived;
6857 }
6858
6859 charStr += buffer.toString(this.encoding, 0, end);
6860
6861 var end = charStr.length - 1;
6862 var charCode = charStr.charCodeAt(end);
6863 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6864 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6865 var size = this.surrogateSize;
6866 this.charLength += size;
6867 this.charReceived += size;
6868 this.charBuffer.copy(this.charBuffer, size, 0, size);
6869 buffer.copy(this.charBuffer, 0, 0, size);
6870 return charStr.substring(0, end);
6871 }
6872
6873 // or just emit the charStr
6874 return charStr;
6875 };
6876
6877 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
6878 // the end of the given buffer. If so, it sets this.charLength to the byte
6879 // length that character, and sets this.charReceived to the number of bytes
6880 // that are available for this character.
6881 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6882 // determine how many bytes we have to check at the end of this buffer
6883 var i = (buffer.length >= 3) ? 3 : buffer.length;
6884
6885 // Figure out if one of the last i bytes of our buffer announces an
6886 // incomplete char.
6887 for (; i > 0; i--) {
6888 var c = buffer[buffer.length - i];
6889
6890 // See http://en.wikipedia.org/wiki/UTF-8#Description
6891
6892 // 110XXXXX
6893 if (i == 1 && c >> 5 == 0x06) {
6894 this.charLength = 2;
6895 break;
6896 }
6897
6898 // 1110XXXX
6899 if (i <= 2 && c >> 4 == 0x0E) {
6900 this.charLength = 3;
6901 break;
6902 }
6903
6904 // 11110XXX
6905 if (i <= 3 && c >> 3 == 0x1E) {
6906 this.charLength = 4;
6907 break;
6908 }
6909 }
6910 this.charReceived = i;
6911 };
6912
6913 StringDecoder.prototype.end = function(buffer) {
6914 var res = '';
6915 if (buffer && buffer.length)
6916 res = this.write(buffer);
6917
6918 if (this.charReceived) {
6919 var cr = this.charReceived;
6920 var buf = this.charBuffer;
6921 var enc = this.encoding;
6922 res += buf.slice(0, cr).toString(enc);
6923 }
6924
6925 return res;
6926 };
6927
6928 function passThroughWrite(buffer) {
6929 return buffer.toString(this.encoding);
6930 }
6931
6932 function utf16DetectIncompleteChar(buffer) {
6933 this.charReceived = buffer.length % 2;
6934 this.charLength = this.charReceived ? 2 : 0;
6935 }
6936
6937 function base64DetectIncompleteChar(buffer) {
6938 this.charReceived = buffer.length % 3;
6939 this.charLength = this.charReceived ? 3 : 0;
6940 }
6941
6942 },{"buffer":7}],28:[function(require,module,exports){
6943 module.exports = function isBuffer(arg) {
6944 return arg && typeof arg === 'object'
6945 && typeof arg.copy === 'function'
6946 && typeof arg.fill === 'function'
6947 && typeof arg.readUInt8 === 'function';
6948 }
6949 },{}],29:[function(require,module,exports){
6950 (function (process,global){
6951 // Copyright Joyent, Inc. and other Node contributors.
6952 //
6953 // Permission is hereby granted, free of charge, to any person obtaining a
6954 // copy of this software and associated documentation files (the
6955 // "Software"), to deal in the Software without restriction, including
6956 // without limitation the rights to use, copy, modify, merge, publish,
6957 // distribute, sublicense, and/or sell copies of the Software, and to permit
6958 // persons to whom the Software is furnished to do so, subject to the
6959 // following conditions:
6960 //
6961 // The above copyright notice and this permission notice shall be included
6962 // in all copies or substantial portions of the Software.
6963 //
6964 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6965 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6966 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6967 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6968 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6969 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6970 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6971
6972 var formatRegExp = /%[sdj%]/g;
6973 exports.format = function(f) {
6974 if (!isString(f)) {
6975 var objects = [];
6976 for (var i = 0; i < arguments.length; i++) {
6977 objects.push(inspect(arguments[i]));
6978 }
6979 return objects.join(' ');
6980 }
6981
6982 var i = 1;
6983 var args = arguments;
6984 var len = args.length;
6985 var str = String(f).replace(formatRegExp, function(x) {
6986 if (x === '%%') return '%';
6987 if (i >= len) return x;
6988 switch (x) {
6989 case '%s': return String(args[i++]);
6990 case '%d': return Number(args[i++]);
6991 case '%j':
6992 try {
6993 return JSON.stringify(args[i++]);
6994 } catch (_) {
6995 return '[Circular]';
6996 }
6997 default:
6998 return x;
6999 }
7000 });
7001 for (var x = args[i]; i < len; x = args[++i]) {
7002 if (isNull(x) || !isObject(x)) {
7003 str += ' ' + x;
7004 } else {
7005 str += ' ' + inspect(x);
7006 }
7007 }
7008 return str;
7009 };
7010
7011
7012 // Mark that a method should not be used.
7013 // Returns a modified function which warns once by default.
7014 // If --no-deprecation is set, then it is a no-op.
7015 exports.deprecate = function(fn, msg) {
7016 // Allow for deprecating things in the process of starting up.
7017 if (isUndefined(global.process)) {
7018 return function() {
7019 return exports.deprecate(fn, msg).apply(this, arguments);
7020 };
7021 }
7022
7023 if (process.noDeprecation === true) {
7024 return fn;
7025 }
7026
7027 var warned = false;
7028 function deprecated() {
7029 if (!warned) {
7030 if (process.throwDeprecation) {
7031 throw new Error(msg);
7032 } else if (process.traceDeprecation) {
7033 console.trace(msg);
7034 } else {
7035 console.error(msg);
7036 }
7037 warned = true;
7038 }
7039 return fn.apply(this, arguments);
7040 }
7041
7042 return deprecated;
7043 };
7044
7045
7046 var debugs = {};
7047 var debugEnviron;
7048 exports.debuglog = function(set) {
7049 if (isUndefined(debugEnviron))
7050 debugEnviron = process.env.NODE_DEBUG || '';
7051 set = set.toUpperCase();
7052 if (!debugs[set]) {
7053 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7054 var pid = process.pid;
7055 debugs[set] = function() {
7056 var msg = exports.format.apply(exports, arguments);
7057 console.error('%s %d: %s', set, pid, msg);
7058 };
7059 } else {
7060 debugs[set] = function() {};
7061 }
7062 }
7063 return debugs[set];
7064 };
7065
7066
7067 /**
7068 * Echos the value of a value. Trys to print the value out
7069 * in the best way possible given the different types.
7070 *
7071 * @param {Object} obj The object to print out.
7072 * @param {Object} opts Optional options object that alters the output.
7073 */
7074 /* legacy: obj, showHidden, depth, colors*/
7075 function inspect(obj, opts) {
7076 // default options
7077 var ctx = {
7078 seen: [],
7079 stylize: stylizeNoColor
7080 };
7081 // legacy...
7082 if (arguments.length >= 3) ctx.depth = arguments[2];
7083 if (arguments.length >= 4) ctx.colors = arguments[3];
7084 if (isBoolean(opts)) {
7085 // legacy...
7086 ctx.showHidden = opts;
7087 } else if (opts) {
7088 // got an "options" object
7089 exports._extend(ctx, opts);
7090 }
7091 // set default options
7092 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7093 if (isUndefined(ctx.depth)) ctx.depth = 2;
7094 if (isUndefined(ctx.colors)) ctx.colors = false;
7095 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7096 if (ctx.colors) ctx.stylize = stylizeWithColor;
7097 return formatValue(ctx, obj, ctx.depth);
7098 }
7099 exports.inspect = inspect;
7100
7101
7102 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7103 inspect.colors = {
7104 'bold' : [1, 22],
7105 'italic' : [3, 23],
7106 'underline' : [4, 24],
7107 'inverse' : [7, 27],
7108 'white' : [37, 39],
7109 'grey' : [90, 39],
7110 'black' : [30, 39],
7111 'blue' : [34, 39],
7112 'cyan' : [36, 39],
7113 'green' : [32, 39],
7114 'magenta' : [35, 39],
7115 'red' : [31, 39],
7116 'yellow' : [33, 39]
7117 };
7118
7119 // Don't use 'blue' not visible on cmd.exe
7120 inspect.styles = {
7121 'special': 'cyan',
7122 'number': 'yellow',
7123 'boolean': 'yellow',
7124 'undefined': 'grey',
7125 'null': 'bold',
7126 'string': 'green',
7127 'date': 'magenta',
7128 // "name": intentionally not styling
7129 'regexp': 'red'
7130 };
7131
7132
7133 function stylizeWithColor(str, styleType) {
7134 var style = inspect.styles[styleType];
7135
7136 if (style) {
7137 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7138 '\u001b[' + inspect.colors[style][1] + 'm';
7139 } else {
7140 return str;
7141 }
7142 }
7143
7144
7145 function stylizeNoColor(str, styleType) {
7146 return str;
7147 }
7148
7149
7150 function arrayToHash(array) {
7151 var hash = {};
7152
7153 array.forEach(function(val, idx) {
7154 hash[val] = true;
7155 });
7156
7157 return hash;
7158 }
7159
7160
7161 function formatValue(ctx, value, recurseTimes) {
7162 // Provide a hook for user-specified inspect functions.
7163 // Check that value is an object with an inspect function on it
7164 if (ctx.customInspect &&
7165 value &&
7166 isFunction(value.inspect) &&
7167 // Filter out the util module, it's inspect function is special
7168 value.inspect !== exports.inspect &&
7169 // Also filter out any prototype objects using the circular check.
7170 !(value.constructor && value.constructor.prototype === value)) {
7171 var ret = value.inspect(recurseTimes, ctx);
7172 if (!isString(ret)) {
7173 ret = formatValue(ctx, ret, recurseTimes);
7174 }
7175 return ret;
7176 }
7177
7178 // Primitive types cannot have properties
7179 var primitive = formatPrimitive(ctx, value);
7180 if (primitive) {
7181 return primitive;
7182 }
7183
7184 // Look up the keys of the object.
7185 var keys = Object.keys(value);
7186 var visibleKeys = arrayToHash(keys);
7187
7188 if (ctx.showHidden) {
7189 keys = Object.getOwnPropertyNames(value);
7190 }
7191
7192 // IE doesn't make error fields non-enumerable
7193 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7194 if (isError(value)
7195 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7196 return formatError(value);
7197 }
7198
7199 // Some type of object without properties can be shortcutted.
7200 if (keys.length === 0) {
7201 if (isFunction(value)) {
7202 var name = value.name ? ': ' + value.name : '';
7203 return ctx.stylize('[Function' + name + ']', 'special');
7204 }
7205 if (isRegExp(value)) {
7206 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7207 }
7208 if (isDate(value)) {
7209 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7210 }
7211 if (isError(value)) {
7212 return formatError(value);
7213 }
7214 }
7215
7216 var base = '', array = false, braces = ['{', '}'];
7217
7218 // Make Array say that they are Array
7219 if (isArray(value)) {
7220 array = true;
7221 braces = ['[', ']'];
7222 }
7223
7224 // Make functions say that they are functions
7225 if (isFunction(value)) {
7226 var n = value.name ? ': ' + value.name : '';
7227 base = ' [Function' + n + ']';
7228 }
7229
7230 // Make RegExps say that they are RegExps
7231 if (isRegExp(value)) {
7232 base = ' ' + RegExp.prototype.toString.call(value);
7233 }
7234
7235 // Make dates with properties first say the date
7236 if (isDate(value)) {
7237 base = ' ' + Date.prototype.toUTCString.call(value);
7238 }
7239
7240 // Make error with message first say the error
7241 if (isError(value)) {
7242 base = ' ' + formatError(value);
7243 }
7244
7245 if (keys.length === 0 && (!array || value.length == 0)) {
7246 return braces[0] + base + braces[1];
7247 }
7248
7249 if (recurseTimes < 0) {
7250 if (isRegExp(value)) {
7251 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7252 } else {
7253 return ctx.stylize('[Object]', 'special');
7254 }
7255 }
7256
7257 ctx.seen.push(value);
7258
7259 var output;
7260 if (array) {
7261 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7262 } else {
7263 output = keys.map(function(key) {
7264 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7265 });
7266 }
7267
7268 ctx.seen.pop();
7269
7270 return reduceToSingleString(output, base, braces);
7271 }
7272
7273
7274 function formatPrimitive(ctx, value) {
7275 if (isUndefined(value))
7276 return ctx.stylize('undefined', 'undefined');
7277 if (isString(value)) {
7278 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7279 .replace(/'/g, "\\'")
7280 .replace(/\\"/g, '"') + '\'';
7281 return ctx.stylize(simple, 'string');
7282 }
7283 if (isNumber(value))
7284 return ctx.stylize('' + value, 'number');
7285 if (isBoolean(value))
7286 return ctx.stylize('' + value, 'boolean');
7287 // For some reason typeof null is "object", so special case here.
7288 if (isNull(value))
7289 return ctx.stylize('null', 'null');
7290 }
7291
7292
7293 function formatError(value) {
7294 return '[' + Error.prototype.toString.call(value) + ']';
7295 }
7296
7297
7298 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7299 var output = [];
7300 for (var i = 0, l = value.length; i < l; ++i) {
7301 if (hasOwnProperty(value, String(i))) {
7302 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7303 String(i), true));
7304 } else {
7305 output.push('');
7306 }
7307 }
7308 keys.forEach(function(key) {
7309 if (!key.match(/^\d+$/)) {
7310 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7311 key, true));
7312 }
7313 });
7314 return output;
7315 }
7316
7317
7318 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7319 var name, str, desc;
7320 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7321 if (desc.get) {
7322 if (desc.set) {
7323 str = ctx.stylize('[Getter/Setter]', 'special');
7324 } else {
7325 str = ctx.stylize('[Getter]', 'special');
7326 }
7327 } else {
7328 if (desc.set) {
7329 str = ctx.stylize('[Setter]', 'special');
7330 }
7331 }
7332 if (!hasOwnProperty(visibleKeys, key)) {
7333 name = '[' + key + ']';
7334 }
7335 if (!str) {
7336 if (ctx.seen.indexOf(desc.value) < 0) {
7337 if (isNull(recurseTimes)) {
7338 str = formatValue(ctx, desc.value, null);
7339 } else {
7340 str = formatValue(ctx, desc.value, recurseTimes - 1);
7341 }
7342 if (str.indexOf('\n') > -1) {
7343 if (array) {
7344 str = str.split('\n').map(function(line) {
7345 return ' ' + line;
7346 }).join('\n').substr(2);
7347 } else {
7348 str = '\n' + str.split('\n').map(function(line) {
7349 return ' ' + line;
7350 }).join('\n');
7351 }
7352 }
7353 } else {
7354 str = ctx.stylize('[Circular]', 'special');
7355 }
7356 }
7357 if (isUndefined(name)) {
7358 if (array && key.match(/^\d+$/)) {
7359 return str;
7360 }
7361 name = JSON.stringify('' + key);
7362 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7363 name = name.substr(1, name.length - 2);
7364 name = ctx.stylize(name, 'name');
7365 } else {
7366 name = name.replace(/'/g, "\\'")
7367 .replace(/\\"/g, '"')
7368 .replace(/(^"|"$)/g, "'");
7369 name = ctx.stylize(name, 'string');
7370 }
7371 }
7372
7373 return name + ': ' + str;
7374 }
7375
7376
7377 function reduceToSingleString(output, base, braces) {
7378 var numLinesEst = 0;
7379 var length = output.reduce(function(prev, cur) {
7380 numLinesEst++;
7381 if (cur.indexOf('\n') >= 0) numLinesEst++;
7382 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7383 }, 0);
7384
7385 if (length > 60) {
7386 return braces[0] +
7387 (base === '' ? '' : base + '\n ') +
7388 ' ' +
7389 output.join(',\n ') +
7390 ' ' +
7391 braces[1];
7392 }
7393
7394 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7395 }
7396
7397
7398 // NOTE: These type checking functions intentionally don't use `instanceof`
7399 // because it is fragile and can be easily faked with `Object.create()`.
7400 function isArray(ar) {
7401 return Array.isArray(ar);
7402 }
7403 exports.isArray = isArray;
7404
7405 function isBoolean(arg) {
7406 return typeof arg === 'boolean';
7407 }
7408 exports.isBoolean = isBoolean;
7409
7410 function isNull(arg) {
7411 return arg === null;
7412 }
7413 exports.isNull = isNull;
7414
7415 function isNullOrUndefined(arg) {
7416 return arg == null;
7417 }
7418 exports.isNullOrUndefined = isNullOrUndefined;
7419
7420 function isNumber(arg) {
7421 return typeof arg === 'number';
7422 }
7423 exports.isNumber = isNumber;
7424
7425 function isString(arg) {
7426 return typeof arg === 'string';
7427 }
7428 exports.isString = isString;
7429
7430 function isSymbol(arg) {
7431 return typeof arg === 'symbol';
7432 }
7433 exports.isSymbol = isSymbol;
7434
7435 function isUndefined(arg) {
7436 return arg === void 0;
7437 }
7438 exports.isUndefined = isUndefined;
7439
7440 function isRegExp(re) {
7441 return isObject(re) && objectToString(re) === '[object RegExp]';
7442 }
7443 exports.isRegExp = isRegExp;
7444
7445 function isObject(arg) {
7446 return typeof arg === 'object' && arg !== null;
7447 }
7448 exports.isObject = isObject;
7449
7450 function isDate(d) {
7451 return isObject(d) && objectToString(d) === '[object Date]';
7452 }
7453 exports.isDate = isDate;
7454
7455 function isError(e) {
7456 return isObject(e) &&
7457 (objectToString(e) === '[object Error]' || e instanceof Error);
7458 }
7459 exports.isError = isError;
7460
7461 function isFunction(arg) {
7462 return typeof arg === 'function';
7463 }
7464 exports.isFunction = isFunction;
7465
7466 function isPrimitive(arg) {
7467 return arg === null ||
7468 typeof arg === 'boolean' ||
7469 typeof arg === 'number' ||
7470 typeof arg === 'string' ||
7471 typeof arg === 'symbol' || // ES6 symbol
7472 typeof arg === 'undefined';
7473 }
7474 exports.isPrimitive = isPrimitive;
7475
7476 exports.isBuffer = require('./support/isBuffer');
7477
7478 function objectToString(o) {
7479 return Object.prototype.toString.call(o);
7480 }
7481
7482
7483 function pad(n) {
7484 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7485 }
7486
7487
7488 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7489 'Oct', 'Nov', 'Dec'];
7490
7491 // 26 Feb 16:19:34
7492 function timestamp() {
7493 var d = new Date();
7494 var time = [pad(d.getHours()),
7495 pad(d.getMinutes()),
7496 pad(d.getSeconds())].join(':');
7497 return [d.getDate(), months[d.getMonth()], time].join(' ');
7498 }
7499
7500
7501 // log is just a thin wrapper to console.log that prepends a timestamp
7502 exports.log = function() {
7503 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7504 };
7505
7506
7507 /**
7508 * Inherit the prototype methods from one constructor into another.
7509 *
7510 * The Function.prototype.inherits from lang.js rewritten as a standalone
7511 * function (not on Function.prototype). NOTE: If this file is to be loaded
7512 * during bootstrapping this function needs to be rewritten using some native
7513 * functions as prototype setup using normal JavaScript does not work as
7514 * expected during bootstrapping (see mirror.js in r114903).
7515 *
7516 * @param {function} ctor Constructor function which needs to inherit the
7517 * prototype.
7518 * @param {function} superCtor Constructor function to inherit prototype from.
7519 */
7520 exports.inherits = require('inherits');
7521
7522 exports._extend = function(origin, add) {
7523 // Don't do anything if add isn't an object
7524 if (!add || !isObject(add)) return origin;
7525
7526 var keys = Object.keys(add);
7527 var i = keys.length;
7528 while (i--) {
7529 origin[keys[i]] = add[keys[i]];
7530 }
7531 return origin;
7532 };
7533
7534 function hasOwnProperty(obj, prop) {
7535 return Object.prototype.hasOwnProperty.call(obj, prop);
7536 }
7537
7538 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7539 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7540 // Base58 encoding/decoding
7541 // Originally written by Mike Hearn for BitcoinJ
7542 // Copyright (c) 2011 Google Inc
7543 // Ported to JavaScript by Stefan Thomas
7544 // Merged Buffer refactorings from base58-native by Stephen Pair
7545 // Copyright (c) 2013 BitPay Inc
7546
7547 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7548 var ALPHABET_MAP = {}
7549 for(var i = 0; i < ALPHABET.length; i++) {
7550 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7551 }
7552 var BASE = 58
7553
7554 function encode(buffer) {
7555 if (buffer.length === 0) return ''
7556
7557 var i, j, digits = [0]
7558 for (i = 0; i < buffer.length; i++) {
7559 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7560
7561 digits[0] += buffer[i]
7562
7563 var carry = 0
7564 for (j = 0; j < digits.length; ++j) {
7565 digits[j] += carry
7566
7567 carry = (digits[j] / BASE) | 0
7568 digits[j] %= BASE
7569 }
7570
7571 while (carry) {
7572 digits.push(carry % BASE)
7573
7574 carry = (carry / BASE) | 0
7575 }
7576 }
7577
7578 // deal with leading zeros
7579 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7580
7581 // convert digits to a string
7582 var stringOutput = ""
7583 for (var i = digits.length - 1; i >= 0; i--) {
7584 stringOutput = stringOutput + ALPHABET[digits[i]]
7585 }
7586 return stringOutput
7587 }
7588
7589 function decode(string) {
7590 if (string.length === 0) return []
7591
7592 var i, j, bytes = [0]
7593 for (i = 0; i < string.length; i++) {
7594 var c = string[i]
7595 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7596
7597 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7598 bytes[0] += ALPHABET_MAP[c]
7599
7600 var carry = 0
7601 for (j = 0; j < bytes.length; ++j) {
7602 bytes[j] += carry
7603
7604 carry = bytes[j] >> 8
7605 bytes[j] &= 0xff
7606 }
7607
7608 while (carry) {
7609 bytes.push(carry & 0xff)
7610
7611 carry >>= 8
7612 }
7613 }
7614
7615 // deal with leading zeros
7616 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7617
7618 return bytes.reverse()
7619 }
7620
7621 module.exports = {
7622 encode: encode,
7623 decode: decode
7624 }
7625
7626 },{}],31:[function(require,module,exports){
7627 (function (Buffer){
7628 'use strict'
7629
7630 var base58 = require('bs58')
7631 var createHash = require('create-hash')
7632
7633 // SHA256(SHA256(buffer))
7634 function sha256x2 (buffer) {
7635 buffer = createHash('sha256').update(buffer).digest()
7636 return createHash('sha256').update(buffer).digest()
7637 }
7638
7639 // Encode a buffer as a base58-check encoded string
7640 function encode (payload) {
7641 var checksum = sha256x2(payload).slice(0, 4)
7642
7643 return base58.encode(Buffer.concat([
7644 payload,
7645 checksum
7646 ]))
7647 }
7648
7649 // Decode a base58-check encoded string to a buffer
7650 function decode (string) {
7651 var buffer = new Buffer(base58.decode(string))
7652
7653 var payload = buffer.slice(0, -4)
7654 var checksum = buffer.slice(-4)
7655 var newChecksum = sha256x2(payload).slice(0, 4)
7656
7657 for (var i = 0; i < newChecksum.length; ++i) {
7658 if (newChecksum[i] === checksum[i]) continue
7659
7660 throw new Error('Invalid checksum')
7661 }
7662
7663 return payload
7664 }
7665
7666 module.exports = {
7667 encode: encode,
7668 decode: decode
7669 }
7670
7671 }).call(this,require("buffer").Buffer)
7672 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7673 (function (Buffer){
7674 'use strict';
7675 var inherits = require('inherits')
7676 var md5 = require('./md5')
7677 var rmd160 = require('ripemd160')
7678 var sha = require('sha.js')
7679
7680 var Transform = require('stream').Transform
7681
7682 function HashNoConstructor(hash) {
7683 Transform.call(this)
7684
7685 this._hash = hash
7686 this.buffers = []
7687 }
7688
7689 inherits(HashNoConstructor, Transform)
7690
7691 HashNoConstructor.prototype._transform = function (data, _, next) {
7692 this.buffers.push(data)
7693
7694 next()
7695 }
7696
7697 HashNoConstructor.prototype._flush = function (next) {
7698 this.push(this.digest())
7699 next()
7700 }
7701
7702 HashNoConstructor.prototype.update = function (data, enc) {
7703 if (typeof data === 'string') {
7704 data = new Buffer(data, enc)
7705 }
7706
7707 this.buffers.push(data)
7708 return this
7709 }
7710
7711 HashNoConstructor.prototype.digest = function (enc) {
7712 var buf = Buffer.concat(this.buffers)
7713 var r = this._hash(buf)
7714 this.buffers = null
7715
7716 return enc ? r.toString(enc) : r
7717 }
7718
7719 function Hash(hash) {
7720 Transform.call(this)
7721
7722 this._hash = hash
7723 }
7724
7725 inherits(Hash, Transform)
7726
7727 Hash.prototype._transform = function (data, enc, next) {
7728 if (enc) data = new Buffer(data, enc)
7729
7730 this._hash.update(data)
7731
7732 next()
7733 }
7734
7735 Hash.prototype._flush = function (next) {
7736 this.push(this._hash.digest())
7737 this._hash = null
7738
7739 next()
7740 }
7741
7742 Hash.prototype.update = function (data, enc) {
7743 if (typeof data === 'string') {
7744 data = new Buffer(data, enc)
7745 }
7746
7747 this._hash.update(data)
7748 return this
7749 }
7750
7751 Hash.prototype.digest = function (enc) {
7752 var outData = this._hash.digest()
7753
7754 return enc ? outData.toString(enc) : outData
7755 }
7756
7757 module.exports = function createHash (alg) {
7758 if ('md5' === alg) return new HashNoConstructor(md5)
7759 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7760
7761 return new Hash(sha(alg))
7762 }
7763
7764 }).call(this,require("buffer").Buffer)
7765 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
7766 (function (Buffer){
7767 'use strict';
7768 var intSize = 4;
7769 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7770 var chrsz = 8;
7771
7772 function toArray(buf, bigEndian) {
7773 if ((buf.length % intSize) !== 0) {
7774 var len = buf.length + (intSize - (buf.length % intSize));
7775 buf = Buffer.concat([buf, zeroBuffer], len);
7776 }
7777
7778 var arr = [];
7779 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7780 for (var i = 0; i < buf.length; i += intSize) {
7781 arr.push(fn.call(buf, i));
7782 }
7783 return arr;
7784 }
7785
7786 function toBuffer(arr, size, bigEndian) {
7787 var buf = new Buffer(size);
7788 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7789 for (var i = 0; i < arr.length; i++) {
7790 fn.call(buf, arr[i], i * 4, true);
7791 }
7792 return buf;
7793 }
7794
7795 function hash(buf, fn, hashSize, bigEndian) {
7796 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7797 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7798 return toBuffer(arr, hashSize, bigEndian);
7799 }
7800 exports.hash = hash;
7801 }).call(this,require("buffer").Buffer)
7802 },{"buffer":7}],34:[function(require,module,exports){
7803 'use strict';
7804 /*
7805 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7806 * Digest Algorithm, as defined in RFC 1321.
7807 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7808 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7809 * Distributed under the BSD License
7810 * See http://pajhome.org.uk/crypt/md5 for more info.
7811 */
7812
7813 var helpers = require('./helpers');
7814
7815 /*
7816 * Calculate the MD5 of an array of little-endian words, and a bit length
7817 */
7818 function core_md5(x, len)
7819 {
7820 /* append padding */
7821 x[len >> 5] |= 0x80 << ((len) % 32);
7822 x[(((len + 64) >>> 9) << 4) + 14] = len;
7823
7824 var a = 1732584193;
7825 var b = -271733879;
7826 var c = -1732584194;
7827 var d = 271733878;
7828
7829 for(var i = 0; i < x.length; i += 16)
7830 {
7831 var olda = a;
7832 var oldb = b;
7833 var oldc = c;
7834 var oldd = d;
7835
7836 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7837 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7838 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7839 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7840 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7841 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7842 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7843 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7844 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7845 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7846 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7847 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7848 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7849 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7850 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7851 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7852
7853 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7854 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7855 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7856 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7857 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7858 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7859 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7860 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7861 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7862 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7863 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7864 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7865 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7866 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7867 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7868 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7869
7870 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7871 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7872 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7873 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7874 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7875 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7876 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7877 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7878 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7879 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7880 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7881 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7882 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7883 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7884 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7885 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7886
7887 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7888 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7889 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7890 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7891 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7892 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7893 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7894 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7895 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7896 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7897 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7898 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7899 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7900 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7901 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7902 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7903
7904 a = safe_add(a, olda);
7905 b = safe_add(b, oldb);
7906 c = safe_add(c, oldc);
7907 d = safe_add(d, oldd);
7908 }
7909 return Array(a, b, c, d);
7910
7911 }
7912
7913 /*
7914 * These functions implement the four basic operations the algorithm uses.
7915 */
7916 function md5_cmn(q, a, b, x, s, t)
7917 {
7918 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7919 }
7920 function md5_ff(a, b, c, d, x, s, t)
7921 {
7922 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7923 }
7924 function md5_gg(a, b, c, d, x, s, t)
7925 {
7926 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7927 }
7928 function md5_hh(a, b, c, d, x, s, t)
7929 {
7930 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7931 }
7932 function md5_ii(a, b, c, d, x, s, t)
7933 {
7934 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7935 }
7936
7937 /*
7938 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7939 * to work around bugs in some JS interpreters.
7940 */
7941 function safe_add(x, y)
7942 {
7943 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7944 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7945 return (msw << 16) | (lsw & 0xFFFF);
7946 }
7947
7948 /*
7949 * Bitwise rotate a 32-bit number to the left.
7950 */
7951 function bit_rol(num, cnt)
7952 {
7953 return (num << cnt) | (num >>> (32 - cnt));
7954 }
7955
7956 module.exports = function md5(buf) {
7957 return helpers.hash(buf, core_md5, 16);
7958 };
7959 },{"./helpers":33}],35:[function(require,module,exports){
7960 arguments[4][12][0].apply(exports,arguments)
7961 },{"dup":12}],36:[function(require,module,exports){
7962 (function (Buffer){
7963 /*
7964 CryptoJS v3.1.2
7965 code.google.com/p/crypto-js
7966 (c) 2009-2013 by Jeff Mott. All rights reserved.
7967 code.google.com/p/crypto-js/wiki/License
7968 */
7969 /** @preserve
7970 (c) 2012 by Cédric Mesnil. All rights reserved.
7971
7972 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7973
7974 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7975 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
7976
7977 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7978 */
7979
7980 // constants table
7981 var zl = [
7982 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7983 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7984 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7985 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7986 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7987 ]
7988
7989 var zr = [
7990 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7991 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7992 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7993 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7994 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7995 ]
7996
7997 var sl = [
7998 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7999 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8000 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8001 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8002 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8003 ]
8004
8005 var sr = [
8006 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8007 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8008 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8009 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8010 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8011 ]
8012
8013 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8014 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8015
8016 function bytesToWords (bytes) {
8017 var words = []
8018 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8019 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8020 }
8021 return words
8022 }
8023
8024 function wordsToBytes (words) {
8025 var bytes = []
8026 for (var b = 0; b < words.length * 32; b += 8) {
8027 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8028 }
8029 return bytes
8030 }
8031
8032 function processBlock (H, M, offset) {
8033 // swap endian
8034 for (var i = 0; i < 16; i++) {
8035 var offset_i = offset + i
8036 var M_offset_i = M[offset_i]
8037
8038 // Swap
8039 M[offset_i] = (
8040 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8041 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8042 )
8043 }
8044
8045 // Working variables
8046 var al, bl, cl, dl, el
8047 var ar, br, cr, dr, er
8048
8049 ar = al = H[0]
8050 br = bl = H[1]
8051 cr = cl = H[2]
8052 dr = dl = H[3]
8053 er = el = H[4]
8054
8055 // computation
8056 var t
8057 for (i = 0; i < 80; i += 1) {
8058 t = (al + M[offset + zl[i]]) | 0
8059 if (i < 16) {
8060 t += f1(bl, cl, dl) + hl[0]
8061 } else if (i < 32) {
8062 t += f2(bl, cl, dl) + hl[1]
8063 } else if (i < 48) {
8064 t += f3(bl, cl, dl) + hl[2]
8065 } else if (i < 64) {
8066 t += f4(bl, cl, dl) + hl[3]
8067 } else {// if (i<80) {
8068 t += f5(bl, cl, dl) + hl[4]
8069 }
8070 t = t | 0
8071 t = rotl(t, sl[i])
8072 t = (t + el) | 0
8073 al = el
8074 el = dl
8075 dl = rotl(cl, 10)
8076 cl = bl
8077 bl = t
8078
8079 t = (ar + M[offset + zr[i]]) | 0
8080 if (i < 16) {
8081 t += f5(br, cr, dr) + hr[0]
8082 } else if (i < 32) {
8083 t += f4(br, cr, dr) + hr[1]
8084 } else if (i < 48) {
8085 t += f3(br, cr, dr) + hr[2]
8086 } else if (i < 64) {
8087 t += f2(br, cr, dr) + hr[3]
8088 } else {// if (i<80) {
8089 t += f1(br, cr, dr) + hr[4]
8090 }
8091
8092 t = t | 0
8093 t = rotl(t, sr[i])
8094 t = (t + er) | 0
8095 ar = er
8096 er = dr
8097 dr = rotl(cr, 10)
8098 cr = br
8099 br = t
8100 }
8101
8102 // intermediate hash value
8103 t = (H[1] + cl + dr) | 0
8104 H[1] = (H[2] + dl + er) | 0
8105 H[2] = (H[3] + el + ar) | 0
8106 H[3] = (H[4] + al + br) | 0
8107 H[4] = (H[0] + bl + cr) | 0
8108 H[0] = t
8109 }
8110
8111 function f1 (x, y, z) {
8112 return ((x) ^ (y) ^ (z))
8113 }
8114
8115 function f2 (x, y, z) {
8116 return (((x) & (y)) | ((~x) & (z)))
8117 }
8118
8119 function f3 (x, y, z) {
8120 return (((x) | (~(y))) ^ (z))
8121 }
8122
8123 function f4 (x, y, z) {
8124 return (((x) & (z)) | ((y) & (~(z))))
8125 }
8126
8127 function f5 (x, y, z) {
8128 return ((x) ^ ((y) | (~(z))))
8129 }
8130
8131 function rotl (x, n) {
8132 return (x << n) | (x >>> (32 - n))
8133 }
8134
8135 function ripemd160 (message) {
8136 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8137
8138 if (typeof message === 'string') {
8139 message = new Buffer(message, 'utf8')
8140 }
8141
8142 var m = bytesToWords(message)
8143
8144 var nBitsLeft = message.length * 8
8145 var nBitsTotal = message.length * 8
8146
8147 // Add padding
8148 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8149 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8150 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8151 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8152 )
8153
8154 for (var i = 0; i < m.length; i += 16) {
8155 processBlock(H, m, i)
8156 }
8157
8158 // swap endian
8159 for (i = 0; i < 5; i++) {
8160 // shortcut
8161 var H_i = H[i]
8162
8163 // Swap
8164 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8165 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8166 }
8167
8168 var digestbytes = wordsToBytes(H)
8169 return new Buffer(digestbytes)
8170 }
8171
8172 module.exports = ripemd160
8173
8174 }).call(this,require("buffer").Buffer)
8175 },{"buffer":7}],37:[function(require,module,exports){
8176 (function (Buffer){
8177 // prototype class for hash functions
8178 function Hash (blockSize, finalSize) {
8179 this._block = new Buffer(blockSize)
8180 this._finalSize = finalSize
8181 this._blockSize = blockSize
8182 this._len = 0
8183 this._s = 0
8184 }
8185
8186 Hash.prototype.update = function (data, enc) {
8187 if (typeof data === 'string') {
8188 enc = enc || 'utf8'
8189 data = new Buffer(data, enc)
8190 }
8191
8192 var l = this._len += data.length
8193 var s = this._s || 0
8194 var f = 0
8195 var buffer = this._block
8196
8197 while (s < l) {
8198 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8199 var ch = (t - f)
8200
8201 for (var i = 0; i < ch; i++) {
8202 buffer[(s % this._blockSize) + i] = data[i + f]
8203 }
8204
8205 s += ch
8206 f += ch
8207
8208 if ((s % this._blockSize) === 0) {
8209 this._update(buffer)
8210 }
8211 }
8212 this._s = s
8213
8214 return this
8215 }
8216
8217 Hash.prototype.digest = function (enc) {
8218 // Suppose the length of the message M, in bits, is l
8219 var l = this._len * 8
8220
8221 // Append the bit 1 to the end of the message
8222 this._block[this._len % this._blockSize] = 0x80
8223
8224 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8225 this._block.fill(0, this._len % this._blockSize + 1)
8226
8227 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8228 this._update(this._block)
8229 this._block.fill(0)
8230 }
8231
8232 // to this append the block which is equal to the number l written in binary
8233 // TODO: handle case where l is > Math.pow(2, 29)
8234 this._block.writeInt32BE(l, this._blockSize - 4)
8235
8236 var hash = this._update(this._block) || this._hash()
8237
8238 return enc ? hash.toString(enc) : hash
8239 }
8240
8241 Hash.prototype._update = function () {
8242 throw new Error('_update must be implemented by subclass')
8243 }
8244
8245 module.exports = Hash
8246
8247 }).call(this,require("buffer").Buffer)
8248 },{"buffer":7}],38:[function(require,module,exports){
8249 var exports = module.exports = function SHA (algorithm) {
8250 algorithm = algorithm.toLowerCase()
8251
8252 var Algorithm = exports[algorithm]
8253 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8254
8255 return new Algorithm()
8256 }
8257
8258 exports.sha = require('./sha')
8259 exports.sha1 = require('./sha1')
8260 exports.sha224 = require('./sha224')
8261 exports.sha256 = require('./sha256')
8262 exports.sha384 = require('./sha384')
8263 exports.sha512 = require('./sha512')
8264
8265 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8266 (function (Buffer){
8267 /*
8268 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8269 * in FIPS PUB 180-1
8270 * This source code is derived from sha1.js of the same repository.
8271 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8272 * operation was added.
8273 */
8274
8275 var inherits = require('inherits')
8276 var Hash = require('./hash')
8277
8278 var W = new Array(80)
8279
8280 function Sha () {
8281 this.init()
8282 this._w = W
8283
8284 Hash.call(this, 64, 56)
8285 }
8286
8287 inherits(Sha, Hash)
8288
8289 Sha.prototype.init = function () {
8290 this._a = 0x67452301 | 0
8291 this._b = 0xefcdab89 | 0
8292 this._c = 0x98badcfe | 0
8293 this._d = 0x10325476 | 0
8294 this._e = 0xc3d2e1f0 | 0
8295
8296 return this
8297 }
8298
8299 /*
8300 * Bitwise rotate a 32-bit number to the left.
8301 */
8302 function rol (num, cnt) {
8303 return (num << cnt) | (num >>> (32 - cnt))
8304 }
8305
8306 Sha.prototype._update = function (M) {
8307 var W = this._w
8308
8309 var a = this._a
8310 var b = this._b
8311 var c = this._c
8312 var d = this._d
8313 var e = this._e
8314
8315 var j = 0, k
8316
8317 /*
8318 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8319 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8320 */
8321 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8322 function loop (w, f) {
8323 W[j] = w
8324
8325 var t = rol(a, 5) + f + e + w + k
8326
8327 e = d
8328 d = c
8329 c = rol(b, 30)
8330 b = a
8331 a = t
8332 j++
8333 }
8334
8335 k = 1518500249
8336 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8337 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8338 k = 1859775393
8339 while (j < 40) loop(calcW(), b ^ c ^ d)
8340 k = -1894007588
8341 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8342 k = -899497514
8343 while (j < 80) loop(calcW(), b ^ c ^ d)
8344
8345 this._a = (a + this._a) | 0
8346 this._b = (b + this._b) | 0
8347 this._c = (c + this._c) | 0
8348 this._d = (d + this._d) | 0
8349 this._e = (e + this._e) | 0
8350 }
8351
8352 Sha.prototype._hash = function () {
8353 var H = new Buffer(20)
8354
8355 H.writeInt32BE(this._a | 0, 0)
8356 H.writeInt32BE(this._b | 0, 4)
8357 H.writeInt32BE(this._c | 0, 8)
8358 H.writeInt32BE(this._d | 0, 12)
8359 H.writeInt32BE(this._e | 0, 16)
8360
8361 return H
8362 }
8363
8364 module.exports = Sha
8365
8366
8367 }).call(this,require("buffer").Buffer)
8368 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8369 (function (Buffer){
8370 /*
8371 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8372 * in FIPS PUB 180-1
8373 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8374 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8375 * Distributed under the BSD License
8376 * See http://pajhome.org.uk/crypt/md5 for details.
8377 */
8378
8379 var inherits = require('inherits')
8380 var Hash = require('./hash')
8381
8382 var W = new Array(80)
8383
8384 function Sha1 () {
8385 this.init()
8386 this._w = W
8387
8388 Hash.call(this, 64, 56)
8389 }
8390
8391 inherits(Sha1, Hash)
8392
8393 Sha1.prototype.init = function () {
8394 this._a = 0x67452301 | 0
8395 this._b = 0xefcdab89 | 0
8396 this._c = 0x98badcfe | 0
8397 this._d = 0x10325476 | 0
8398 this._e = 0xc3d2e1f0 | 0
8399
8400 return this
8401 }
8402
8403 /*
8404 * Bitwise rotate a 32-bit number to the left.
8405 */
8406 function rol (num, cnt) {
8407 return (num << cnt) | (num >>> (32 - cnt))
8408 }
8409
8410 Sha1.prototype._update = function (M) {
8411 var W = this._w
8412
8413 var a = this._a
8414 var b = this._b
8415 var c = this._c
8416 var d = this._d
8417 var e = this._e
8418
8419 var j = 0, k
8420
8421 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8422 function loop (w, f) {
8423 W[j] = w
8424
8425 var t = rol(a, 5) + f + e + w + k
8426
8427 e = d
8428 d = c
8429 c = rol(b, 30)
8430 b = a
8431 a = t
8432 j++
8433 }
8434
8435 k = 1518500249
8436 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8437 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8438 k = 1859775393
8439 while (j < 40) loop(calcW(), b ^ c ^ d)
8440 k = -1894007588
8441 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8442 k = -899497514
8443 while (j < 80) loop(calcW(), b ^ c ^ d)
8444
8445 this._a = (a + this._a) | 0
8446 this._b = (b + this._b) | 0
8447 this._c = (c + this._c) | 0
8448 this._d = (d + this._d) | 0
8449 this._e = (e + this._e) | 0
8450 }
8451
8452 Sha1.prototype._hash = function () {
8453 var H = new Buffer(20)
8454
8455 H.writeInt32BE(this._a | 0, 0)
8456 H.writeInt32BE(this._b | 0, 4)
8457 H.writeInt32BE(this._c | 0, 8)
8458 H.writeInt32BE(this._d | 0, 12)
8459 H.writeInt32BE(this._e | 0, 16)
8460
8461 return H
8462 }
8463
8464 module.exports = Sha1
8465
8466 }).call(this,require("buffer").Buffer)
8467 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8468 (function (Buffer){
8469 /**
8470 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8471 * in FIPS 180-2
8472 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8473 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8474 *
8475 */
8476
8477 var inherits = require('inherits')
8478 var Sha256 = require('./sha256')
8479 var Hash = require('./hash')
8480
8481 var W = new Array(64)
8482
8483 function Sha224 () {
8484 this.init()
8485
8486 this._w = W // new Array(64)
8487
8488 Hash.call(this, 64, 56)
8489 }
8490
8491 inherits(Sha224, Sha256)
8492
8493 Sha224.prototype.init = function () {
8494 this._a = 0xc1059ed8 | 0
8495 this._b = 0x367cd507 | 0
8496 this._c = 0x3070dd17 | 0
8497 this._d = 0xf70e5939 | 0
8498 this._e = 0xffc00b31 | 0
8499 this._f = 0x68581511 | 0
8500 this._g = 0x64f98fa7 | 0
8501 this._h = 0xbefa4fa4 | 0
8502
8503 return this
8504 }
8505
8506 Sha224.prototype._hash = function () {
8507 var H = new Buffer(28)
8508
8509 H.writeInt32BE(this._a, 0)
8510 H.writeInt32BE(this._b, 4)
8511 H.writeInt32BE(this._c, 8)
8512 H.writeInt32BE(this._d, 12)
8513 H.writeInt32BE(this._e, 16)
8514 H.writeInt32BE(this._f, 20)
8515 H.writeInt32BE(this._g, 24)
8516
8517 return H
8518 }
8519
8520 module.exports = Sha224
8521
8522 }).call(this,require("buffer").Buffer)
8523 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8524 (function (Buffer){
8525 /**
8526 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8527 * in FIPS 180-2
8528 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8529 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8530 *
8531 */
8532
8533 var inherits = require('inherits')
8534 var Hash = require('./hash')
8535
8536 var K = [
8537 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8538 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8539 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8540 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8541 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8542 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8543 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8544 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8545 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8546 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8547 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8548 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8549 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8550 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8551 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8552 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8553 ]
8554
8555 var W = new Array(64)
8556
8557 function Sha256 () {
8558 this.init()
8559
8560 this._w = W // new Array(64)
8561
8562 Hash.call(this, 64, 56)
8563 }
8564
8565 inherits(Sha256, Hash)
8566
8567 Sha256.prototype.init = function () {
8568 this._a = 0x6a09e667 | 0
8569 this._b = 0xbb67ae85 | 0
8570 this._c = 0x3c6ef372 | 0
8571 this._d = 0xa54ff53a | 0
8572 this._e = 0x510e527f | 0
8573 this._f = 0x9b05688c | 0
8574 this._g = 0x1f83d9ab | 0
8575 this._h = 0x5be0cd19 | 0
8576
8577 return this
8578 }
8579
8580 function S (X, n) {
8581 return (X >>> n) | (X << (32 - n))
8582 }
8583
8584 function R (X, n) {
8585 return (X >>> n)
8586 }
8587
8588 function Ch (x, y, z) {
8589 return ((x & y) ^ ((~x) & z))
8590 }
8591
8592 function Maj (x, y, z) {
8593 return ((x & y) ^ (x & z) ^ (y & z))
8594 }
8595
8596 function Sigma0256 (x) {
8597 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8598 }
8599
8600 function Sigma1256 (x) {
8601 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8602 }
8603
8604 function Gamma0256 (x) {
8605 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8606 }
8607
8608 function Gamma1256 (x) {
8609 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8610 }
8611
8612 Sha256.prototype._update = function (M) {
8613 var W = this._w
8614
8615 var a = this._a | 0
8616 var b = this._b | 0
8617 var c = this._c | 0
8618 var d = this._d | 0
8619 var e = this._e | 0
8620 var f = this._f | 0
8621 var g = this._g | 0
8622 var h = this._h | 0
8623
8624 var j = 0
8625
8626 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8627 function loop (w) {
8628 W[j] = w
8629
8630 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8631 var T2 = Sigma0256(a) + Maj(a, b, c)
8632
8633 h = g
8634 g = f
8635 f = e
8636 e = d + T1
8637 d = c
8638 c = b
8639 b = a
8640 a = T1 + T2
8641
8642 j++
8643 }
8644
8645 while (j < 16) loop(M.readInt32BE(j * 4))
8646 while (j < 64) loop(calcW())
8647
8648 this._a = (a + this._a) | 0
8649 this._b = (b + this._b) | 0
8650 this._c = (c + this._c) | 0
8651 this._d = (d + this._d) | 0
8652 this._e = (e + this._e) | 0
8653 this._f = (f + this._f) | 0
8654 this._g = (g + this._g) | 0
8655 this._h = (h + this._h) | 0
8656 }
8657
8658 Sha256.prototype._hash = function () {
8659 var H = new Buffer(32)
8660
8661 H.writeInt32BE(this._a, 0)
8662 H.writeInt32BE(this._b, 4)
8663 H.writeInt32BE(this._c, 8)
8664 H.writeInt32BE(this._d, 12)
8665 H.writeInt32BE(this._e, 16)
8666 H.writeInt32BE(this._f, 20)
8667 H.writeInt32BE(this._g, 24)
8668 H.writeInt32BE(this._h, 28)
8669
8670 return H
8671 }
8672
8673 module.exports = Sha256
8674
8675 }).call(this,require("buffer").Buffer)
8676 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8677 (function (Buffer){
8678 var inherits = require('inherits')
8679 var SHA512 = require('./sha512')
8680 var Hash = require('./hash')
8681
8682 var W = new Array(160)
8683
8684 function Sha384 () {
8685 this.init()
8686 this._w = W
8687
8688 Hash.call(this, 128, 112)
8689 }
8690
8691 inherits(Sha384, SHA512)
8692
8693 Sha384.prototype.init = function () {
8694 this._a = 0xcbbb9d5d | 0
8695 this._b = 0x629a292a | 0
8696 this._c = 0x9159015a | 0
8697 this._d = 0x152fecd8 | 0
8698 this._e = 0x67332667 | 0
8699 this._f = 0x8eb44a87 | 0
8700 this._g = 0xdb0c2e0d | 0
8701 this._h = 0x47b5481d | 0
8702
8703 this._al = 0xc1059ed8 | 0
8704 this._bl = 0x367cd507 | 0
8705 this._cl = 0x3070dd17 | 0
8706 this._dl = 0xf70e5939 | 0
8707 this._el = 0xffc00b31 | 0
8708 this._fl = 0x68581511 | 0
8709 this._gl = 0x64f98fa7 | 0
8710 this._hl = 0xbefa4fa4 | 0
8711
8712 return this
8713 }
8714
8715 Sha384.prototype._hash = function () {
8716 var H = new Buffer(48)
8717
8718 function writeInt64BE (h, l, offset) {
8719 H.writeInt32BE(h, offset)
8720 H.writeInt32BE(l, offset + 4)
8721 }
8722
8723 writeInt64BE(this._a, this._al, 0)
8724 writeInt64BE(this._b, this._bl, 8)
8725 writeInt64BE(this._c, this._cl, 16)
8726 writeInt64BE(this._d, this._dl, 24)
8727 writeInt64BE(this._e, this._el, 32)
8728 writeInt64BE(this._f, this._fl, 40)
8729
8730 return H
8731 }
8732
8733 module.exports = Sha384
8734
8735 }).call(this,require("buffer").Buffer)
8736 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8737 (function (Buffer){
8738 var inherits = require('inherits')
8739 var Hash = require('./hash')
8740
8741 var K = [
8742 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8743 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8744 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8745 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8746 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8747 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8748 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8749 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8750 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8751 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8752 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8753 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8754 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8755 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8756 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8757 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8758 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8759 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8760 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8761 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8762 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8763 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8764 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8765 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8766 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8767 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8768 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8769 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8770 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8771 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8772 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8773 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8774 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8775 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8776 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8777 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8778 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8779 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8780 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8781 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8782 ]
8783
8784 var W = new Array(160)
8785
8786 function Sha512 () {
8787 this.init()
8788 this._w = W
8789
8790 Hash.call(this, 128, 112)
8791 }
8792
8793 inherits(Sha512, Hash)
8794
8795 Sha512.prototype.init = function () {
8796 this._a = 0x6a09e667 | 0
8797 this._b = 0xbb67ae85 | 0
8798 this._c = 0x3c6ef372 | 0
8799 this._d = 0xa54ff53a | 0
8800 this._e = 0x510e527f | 0
8801 this._f = 0x9b05688c | 0
8802 this._g = 0x1f83d9ab | 0
8803 this._h = 0x5be0cd19 | 0
8804
8805 this._al = 0xf3bcc908 | 0
8806 this._bl = 0x84caa73b | 0
8807 this._cl = 0xfe94f82b | 0
8808 this._dl = 0x5f1d36f1 | 0
8809 this._el = 0xade682d1 | 0
8810 this._fl = 0x2b3e6c1f | 0
8811 this._gl = 0xfb41bd6b | 0
8812 this._hl = 0x137e2179 | 0
8813
8814 return this
8815 }
8816
8817 function S (X, Xl, n) {
8818 return (X >>> n) | (Xl << (32 - n))
8819 }
8820
8821 function Ch (x, y, z) {
8822 return ((x & y) ^ ((~x) & z))
8823 }
8824
8825 function Maj (x, y, z) {
8826 return ((x & y) ^ (x & z) ^ (y & z))
8827 }
8828
8829 Sha512.prototype._update = function (M) {
8830 var W = this._w
8831
8832 var a = this._a | 0
8833 var b = this._b | 0
8834 var c = this._c | 0
8835 var d = this._d | 0
8836 var e = this._e | 0
8837 var f = this._f | 0
8838 var g = this._g | 0
8839 var h = this._h | 0
8840
8841 var al = this._al | 0
8842 var bl = this._bl | 0
8843 var cl = this._cl | 0
8844 var dl = this._dl | 0
8845 var el = this._el | 0
8846 var fl = this._fl | 0
8847 var gl = this._gl | 0
8848 var hl = this._hl | 0
8849
8850 var i = 0, j = 0
8851 var Wi, Wil
8852 function calcW () {
8853 var x = W[j - 15 * 2]
8854 var xl = W[j - 15 * 2 + 1]
8855 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8856 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8857
8858 x = W[j - 2 * 2]
8859 xl = W[j - 2 * 2 + 1]
8860 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8861 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8862
8863 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8864 var Wi7 = W[j - 7 * 2]
8865 var Wi7l = W[j - 7 * 2 + 1]
8866
8867 var Wi16 = W[j - 16 * 2]
8868 var Wi16l = W[j - 16 * 2 + 1]
8869
8870 Wil = gamma0l + Wi7l
8871 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8872 Wil = Wil + gamma1l
8873 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8874 Wil = Wil + Wi16l
8875 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8876 }
8877
8878 function loop () {
8879 W[j] = Wi
8880 W[j + 1] = Wil
8881
8882 var maj = Maj(a, b, c)
8883 var majl = Maj(al, bl, cl)
8884
8885 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8886 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8887 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8888 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
8889
8890 // t1 = h + sigma1 + ch + K[i] + W[i]
8891 var Ki = K[j]
8892 var Kil = K[j + 1]
8893
8894 var ch = Ch(e, f, g)
8895 var chl = Ch(el, fl, gl)
8896
8897 var t1l = hl + sigma1l
8898 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8899 t1l = t1l + chl
8900 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8901 t1l = t1l + Kil
8902 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8903 t1l = t1l + Wil
8904 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
8905
8906 // t2 = sigma0 + maj
8907 var t2l = sigma0l + majl
8908 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
8909
8910 h = g
8911 hl = gl
8912 g = f
8913 gl = fl
8914 f = e
8915 fl = el
8916 el = (dl + t1l) | 0
8917 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8918 d = c
8919 dl = cl
8920 c = b
8921 cl = bl
8922 b = a
8923 bl = al
8924 al = (t1l + t2l) | 0
8925 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8926
8927 i++
8928 j += 2
8929 }
8930
8931 while (i < 16) {
8932 Wi = M.readInt32BE(j * 4)
8933 Wil = M.readInt32BE(j * 4 + 4)
8934
8935 loop()
8936 }
8937
8938 while (i < 80) {
8939 calcW()
8940 loop()
8941 }
8942
8943 this._al = (this._al + al) | 0
8944 this._bl = (this._bl + bl) | 0
8945 this._cl = (this._cl + cl) | 0
8946 this._dl = (this._dl + dl) | 0
8947 this._el = (this._el + el) | 0
8948 this._fl = (this._fl + fl) | 0
8949 this._gl = (this._gl + gl) | 0
8950 this._hl = (this._hl + hl) | 0
8951
8952 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8953 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8954 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8955 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8956 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8957 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8958 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8959 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8960 }
8961
8962 Sha512.prototype._hash = function () {
8963 var H = new Buffer(64)
8964
8965 function writeInt64BE (h, l, offset) {
8966 H.writeInt32BE(h, offset)
8967 H.writeInt32BE(l, offset + 4)
8968 }
8969
8970 writeInt64BE(this._a, this._al, 0)
8971 writeInt64BE(this._b, this._bl, 8)
8972 writeInt64BE(this._c, this._cl, 16)
8973 writeInt64BE(this._d, this._dl, 24)
8974 writeInt64BE(this._e, this._el, 32)
8975 writeInt64BE(this._f, this._fl, 40)
8976 writeInt64BE(this._g, this._gl, 48)
8977 writeInt64BE(this._h, this._hl, 56)
8978
8979 return H
8980 }
8981
8982 module.exports = Sha512
8983
8984 }).call(this,require("buffer").Buffer)
8985 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8986 (function (Buffer){
8987 'use strict';
8988 var createHash = require('create-hash/browser');
8989 var inherits = require('inherits')
8990
8991 var Transform = require('stream').Transform
8992
8993 var ZEROS = new Buffer(128)
8994 ZEROS.fill(0)
8995
8996 function Hmac(alg, key) {
8997 Transform.call(this)
8998
8999 if (typeof key === 'string') {
9000 key = new Buffer(key)
9001 }
9002
9003 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9004
9005 this._alg = alg
9006 this._key = key
9007
9008 if (key.length > blocksize) {
9009 key = createHash(alg).update(key).digest()
9010
9011 } else if (key.length < blocksize) {
9012 key = Buffer.concat([key, ZEROS], blocksize)
9013 }
9014
9015 var ipad = this._ipad = new Buffer(blocksize)
9016 var opad = this._opad = new Buffer(blocksize)
9017
9018 for (var i = 0; i < blocksize; i++) {
9019 ipad[i] = key[i] ^ 0x36
9020 opad[i] = key[i] ^ 0x5C
9021 }
9022
9023 this._hash = createHash(alg).update(ipad)
9024 }
9025
9026 inherits(Hmac, Transform)
9027
9028 Hmac.prototype.update = function (data, enc) {
9029 this._hash.update(data, enc)
9030
9031 return this
9032 }
9033
9034 Hmac.prototype._transform = function (data, _, next) {
9035 this._hash.update(data)
9036
9037 next()
9038 }
9039
9040 Hmac.prototype._flush = function (next) {
9041 this.push(this.digest())
9042
9043 next()
9044 }
9045
9046 Hmac.prototype.digest = function (enc) {
9047 var h = this._hash.digest()
9048
9049 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9050 }
9051
9052 module.exports = function createHmac(alg, key) {
9053 return new Hmac(alg, key)
9054 }
9055
9056 }).call(this,require("buffer").Buffer)
9057 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9058 arguments[4][12][0].apply(exports,arguments)
9059 },{"dup":12}],47:[function(require,module,exports){
9060 var assert = require('assert')
9061 var BigInteger = require('bigi')
9062
9063 var Point = require('./point')
9064
9065 function Curve(p, a, b, Gx, Gy, n, h) {
9066 this.p = p
9067 this.a = a
9068 this.b = b
9069 this.G = Point.fromAffine(this, Gx, Gy)
9070 this.n = n
9071 this.h = h
9072
9073 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9074
9075 // result caching
9076 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9077 }
9078
9079 Curve.prototype.pointFromX = function(isOdd, x) {
9080 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9081 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9082
9083 var y = beta
9084 if (beta.isEven() ^ !isOdd) {
9085 y = this.p.subtract(y) // -y % p
9086 }
9087
9088 return Point.fromAffine(this, x, y)
9089 }
9090
9091 Curve.prototype.isInfinity = function(Q) {
9092 if (Q === this.infinity) return true
9093
9094 return Q.z.signum() === 0 && Q.y.signum() !== 0
9095 }
9096
9097 Curve.prototype.isOnCurve = function(Q) {
9098 if (this.isInfinity(Q)) return true
9099
9100 var x = Q.affineX
9101 var y = Q.affineY
9102 var a = this.a
9103 var b = this.b
9104 var p = this.p
9105
9106 // Check that xQ and yQ are integers in the interval [0, p - 1]
9107 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9108 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9109
9110 // and check that y^2 = x^3 + ax + b (mod p)
9111 var lhs = y.square().mod(p)
9112 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9113 return lhs.equals(rhs)
9114 }
9115
9116 /**
9117 * Validate an elliptic curve point.
9118 *
9119 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9120 */
9121 Curve.prototype.validate = function(Q) {
9122 // Check Q != O
9123 assert(!this.isInfinity(Q), 'Point is at infinity')
9124 assert(this.isOnCurve(Q), 'Point is not on the curve')
9125
9126 // Check nQ = O (where Q is a scalar multiple of G)
9127 var nQ = Q.multiply(this.n)
9128 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9129
9130 return true
9131 }
9132
9133 module.exports = Curve
9134
9135 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9136 module.exports={
9137 "secp128r1": {
9138 "p": "fffffffdffffffffffffffffffffffff",
9139 "a": "fffffffdfffffffffffffffffffffffc",
9140 "b": "e87579c11079f43dd824993c2cee5ed3",
9141 "n": "fffffffe0000000075a30d1b9038a115",
9142 "h": "01",
9143 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9144 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9145 },
9146 "secp160k1": {
9147 "p": "fffffffffffffffffffffffffffffffeffffac73",
9148 "a": "00",
9149 "b": "07",
9150 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9151 "h": "01",
9152 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9153 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9154 },
9155 "secp160r1": {
9156 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9157 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9158 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9159 "n": "0100000000000000000001f4c8f927aed3ca752257",
9160 "h": "01",
9161 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9162 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9163 },
9164 "secp192k1": {
9165 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9166 "a": "00",
9167 "b": "03",
9168 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9169 "h": "01",
9170 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9171 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9172 },
9173 "secp192r1": {
9174 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9175 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9176 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9177 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9178 "h": "01",
9179 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9180 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9181 },
9182 "secp256k1": {
9183 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9184 "a": "00",
9185 "b": "07",
9186 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9187 "h": "01",
9188 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9189 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9190 },
9191 "secp256r1": {
9192 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9193 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9194 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9195 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9196 "h": "01",
9197 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9198 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9199 }
9200 }
9201
9202 },{}],49:[function(require,module,exports){
9203 var Point = require('./point')
9204 var Curve = require('./curve')
9205
9206 var getCurveByName = require('./names')
9207
9208 module.exports = {
9209 Curve: Curve,
9210 Point: Point,
9211 getCurveByName: getCurveByName
9212 }
9213
9214 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9215 var BigInteger = require('bigi')
9216
9217 var curves = require('./curves')
9218 var Curve = require('./curve')
9219
9220 function getCurveByName(name) {
9221 var curve = curves[name]
9222 if (!curve) return null
9223
9224 var p = new BigInteger(curve.p, 16)
9225 var a = new BigInteger(curve.a, 16)
9226 var b = new BigInteger(curve.b, 16)
9227 var n = new BigInteger(curve.n, 16)
9228 var h = new BigInteger(curve.h, 16)
9229 var Gx = new BigInteger(curve.Gx, 16)
9230 var Gy = new BigInteger(curve.Gy, 16)
9231
9232 return new Curve(p, a, b, Gx, Gy, n, h)
9233 }
9234
9235 module.exports = getCurveByName
9236
9237 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9238 (function (Buffer){
9239 var assert = require('assert')
9240 var BigInteger = require('bigi')
9241
9242 var THREE = BigInteger.valueOf(3)
9243
9244 function Point(curve, x, y, z) {
9245 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9246
9247 this.curve = curve
9248 this.x = x
9249 this.y = y
9250 this.z = z
9251 this._zInv = null
9252
9253 this.compressed = true
9254 }
9255
9256 Object.defineProperty(Point.prototype, 'zInv', {
9257 get: function() {
9258 if (this._zInv === null) {
9259 this._zInv = this.z.modInverse(this.curve.p)
9260 }
9261
9262 return this._zInv
9263 }
9264 })
9265
9266 Object.defineProperty(Point.prototype, 'affineX', {
9267 get: function() {
9268 return this.x.multiply(this.zInv).mod(this.curve.p)
9269 }
9270 })
9271
9272 Object.defineProperty(Point.prototype, 'affineY', {
9273 get: function() {
9274 return this.y.multiply(this.zInv).mod(this.curve.p)
9275 }
9276 })
9277
9278 Point.fromAffine = function(curve, x, y) {
9279 return new Point(curve, x, y, BigInteger.ONE)
9280 }
9281
9282 Point.prototype.equals = function(other) {
9283 if (other === this) return true
9284 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9285 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9286
9287 // u = Y2 * Z1 - Y1 * Z2
9288 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9289
9290 if (u.signum() !== 0) return false
9291
9292 // v = X2 * Z1 - X1 * Z2
9293 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9294
9295 return v.signum() === 0
9296 }
9297
9298 Point.prototype.negate = function() {
9299 var y = this.curve.p.subtract(this.y)
9300
9301 return new Point(this.curve, this.x, y, this.z)
9302 }
9303
9304 Point.prototype.add = function(b) {
9305 if (this.curve.isInfinity(this)) return b
9306 if (this.curve.isInfinity(b)) return this
9307
9308 var x1 = this.x
9309 var y1 = this.y
9310 var x2 = b.x
9311 var y2 = b.y
9312
9313 // u = Y2 * Z1 - Y1 * Z2
9314 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9315 // v = X2 * Z1 - X1 * Z2
9316 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9317
9318 if (v.signum() === 0) {
9319 if (u.signum() === 0) {
9320 return this.twice() // this == b, so double
9321 }
9322
9323 return this.curve.infinity // this = -b, so infinity
9324 }
9325
9326 var v2 = v.square()
9327 var v3 = v2.multiply(v)
9328 var x1v2 = x1.multiply(v2)
9329 var zu2 = u.square().multiply(this.z)
9330
9331 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9332 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9333 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9334 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
9335 // z3 = v^3 * z1 * z2
9336 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9337
9338 return new Point(this.curve, x3, y3, z3)
9339 }
9340
9341 Point.prototype.twice = function() {
9342 if (this.curve.isInfinity(this)) return this
9343 if (this.y.signum() === 0) return this.curve.infinity
9344
9345 var x1 = this.x
9346 var y1 = this.y
9347
9348 var y1z1 = y1.multiply(this.z)
9349 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9350 var a = this.curve.a
9351
9352 // w = 3 * x1^2 + a * z1^2
9353 var w = x1.square().multiply(THREE)
9354
9355 if (a.signum() !== 0) {
9356 w = w.add(this.z.square().multiply(a))
9357 }
9358
9359 w = w.mod(this.curve.p)
9360 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9361 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9362 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9363 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9364 // z3 = 8 * (y1 * z1)^3
9365 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9366
9367 return new Point(this.curve, x3, y3, z3)
9368 }
9369
9370 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9371 // TODO: modularize the multiplication algorithm
9372 Point.prototype.multiply = function(k) {
9373 if (this.curve.isInfinity(this)) return this
9374 if (k.signum() === 0) return this.curve.infinity
9375
9376 var e = k
9377 var h = e.multiply(THREE)
9378
9379 var neg = this.negate()
9380 var R = this
9381
9382 for (var i = h.bitLength() - 2; i > 0; --i) {
9383 R = R.twice()
9384
9385 var hBit = h.testBit(i)
9386 var eBit = e.testBit(i)
9387
9388 if (hBit != eBit) {
9389 R = R.add(hBit ? this : neg)
9390 }
9391 }
9392
9393 return R
9394 }
9395
9396 // Compute this*j + x*k (simultaneous multiplication)
9397 Point.prototype.multiplyTwo = function(j, x, k) {
9398 var i
9399
9400 if (j.bitLength() > k.bitLength())
9401 i = j.bitLength() - 1
9402 else
9403 i = k.bitLength() - 1
9404
9405 var R = this.curve.infinity
9406 var both = this.add(x)
9407
9408 while (i >= 0) {
9409 R = R.twice()
9410
9411 var jBit = j.testBit(i)
9412 var kBit = k.testBit(i)
9413
9414 if (jBit) {
9415 if (kBit) {
9416 R = R.add(both)
9417
9418 } else {
9419 R = R.add(this)
9420 }
9421
9422 } else {
9423 if (kBit) {
9424 R = R.add(x)
9425 }
9426 }
9427 --i
9428 }
9429
9430 return R
9431 }
9432
9433 Point.prototype.getEncoded = function(compressed) {
9434 if (compressed == undefined) compressed = this.compressed
9435 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9436
9437 var x = this.affineX
9438 var y = this.affineY
9439
9440 var buffer
9441
9442 // Determine size of q in bytes
9443 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9444
9445 // 0x02/0x03 | X
9446 if (compressed) {
9447 buffer = new Buffer(1 + byteLength)
9448 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9449
9450 // 0x04 | X | Y
9451 } else {
9452 buffer = new Buffer(1 + byteLength + byteLength)
9453 buffer.writeUInt8(0x04, 0)
9454
9455 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9456 }
9457
9458 x.toBuffer(byteLength).copy(buffer, 1)
9459
9460 return buffer
9461 }
9462
9463 Point.decodeFrom = function(curve, buffer) {
9464 var type = buffer.readUInt8(0)
9465 var compressed = (type !== 4)
9466
9467 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9468 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9469
9470 var Q
9471 if (compressed) {
9472 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9473 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9474
9475 var isOdd = (type === 0x03)
9476 Q = curve.pointFromX(isOdd, x)
9477
9478 } else {
9479 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9480
9481 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9482 Q = Point.fromAffine(curve, x, y)
9483 }
9484
9485 Q.compressed = compressed
9486 return Q
9487 }
9488
9489 Point.prototype.toString = function () {
9490 if (this.curve.isInfinity(this)) return '(INFINITY)'
9491
9492 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9493 }
9494
9495 module.exports = Point
9496
9497 }).call(this,require("buffer").Buffer)
9498 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9499 (function (process,global,Buffer){
9500 'use strict';
9501
9502 var crypto = global.crypto || global.msCrypto
9503 if(crypto && crypto.getRandomValues) {
9504 module.exports = randomBytes;
9505 } else {
9506 module.exports = oldBrowser;
9507 }
9508 function randomBytes(size, cb) {
9509 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9510 /* This will not work in older browsers.
9511 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9512 */
9513
9514 crypto.getRandomValues(bytes);
9515 if (typeof cb === 'function') {
9516 return process.nextTick(function () {
9517 cb(null, bytes);
9518 });
9519 }
9520 return bytes;
9521 }
9522 function oldBrowser() {
9523 throw new Error(
9524 'secure random number generation not supported by this browser\n'+
9525 'use chrome, FireFox or Internet Explorer 11'
9526 )
9527 }
9528
9529 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9530 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9531 (function (Buffer){
9532 'use strict';
9533
9534 function getFunctionName(fn) {
9535 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9536 }
9537
9538 function getTypeTypeName(type) {
9539 if (nativeTypes.Function(type)) {
9540 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9541 }
9542 if (nativeTypes.Object(type)) return JSON.stringify(type);
9543
9544 return type;
9545 }
9546
9547 function getValueTypeName(value) {
9548 if (nativeTypes.Null(value)) return '';
9549
9550 return getFunctionName(value.constructor);
9551 }
9552
9553 function tfErrorString(type, value) {
9554 var typeTypeName = getTypeTypeName(type);
9555 var valueTypeName = getValueTypeName(value);
9556
9557 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9558 }
9559
9560 function tfPropertyErrorString(type, name, value) {
9561 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9562 }
9563
9564 var nativeTypes = {
9565 Array: (function (_Array) {
9566 function Array(_x) {
9567 return _Array.apply(this, arguments);
9568 }
9569
9570 Array.toString = function () {
9571 return _Array.toString();
9572 };
9573
9574 return Array;
9575 })(function (value) {
9576 return value !== null && value !== undefined && value.constructor === Array;
9577 }),
9578 Boolean: function Boolean(value) {
9579 return typeof value === 'boolean';
9580 },
9581 Buffer: (function (_Buffer) {
9582 function Buffer(_x2) {
9583 return _Buffer.apply(this, arguments);
9584 }
9585
9586 Buffer.toString = function () {
9587 return _Buffer.toString();
9588 };
9589
9590 return Buffer;
9591 })(function (value) {
9592 return Buffer.isBuffer(value);
9593 }),
9594 Function: function Function(value) {
9595 return typeof value === 'function';
9596 },
9597 Null: function Null(value) {
9598 return value === undefined || value === null;
9599 },
9600 Number: function Number(value) {
9601 return typeof value === 'number';
9602 },
9603 Object: function Object(value) {
9604 return typeof value === 'object';
9605 },
9606 String: function String(value) {
9607 return typeof value === 'string';
9608 },
9609 '': function _() {
9610 return true;
9611 }
9612 };
9613
9614 function tJSON(type) {
9615 return type && type.toJSON ? type.toJSON() : type;
9616 }
9617
9618 function sJSON(type) {
9619 var json = tJSON(type);
9620 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9621 }
9622
9623 var otherTypes = {
9624 arrayOf: function arrayOf(type) {
9625 function arrayOf(value, strict) {
9626 try {
9627 return nativeTypes.Array(value) && value.every(function (x) {
9628 return typeforce(type, x, strict);
9629 });
9630 } catch (e) {
9631 return false;
9632 }
9633 }
9634 arrayOf.toJSON = function () {
9635 return [tJSON(type)];
9636 };
9637
9638 return arrayOf;
9639 },
9640
9641 maybe: function maybe(type) {
9642 function maybe(value, strict) {
9643 return nativeTypes.Null(value) || typeforce(type, value, strict);
9644 }
9645 maybe.toJSON = function () {
9646 return '?' + sJSON(type);
9647 };
9648
9649 return maybe;
9650 },
9651
9652 object: function object(type) {
9653 function object(value, strict) {
9654 typeforce(nativeTypes.Object, value, strict);
9655
9656 var propertyName, propertyType, propertyValue;
9657
9658 try {
9659 for (propertyName in type) {
9660 propertyType = type[propertyName];
9661 propertyValue = value[propertyName];
9662
9663 typeforce(propertyType, propertyValue, strict);
9664 }
9665 } catch (e) {
9666 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9667 }
9668
9669 if (strict) {
9670 for (propertyName in value) {
9671 if (type[propertyName]) continue;
9672
9673 throw new TypeError('Unexpected property "' + propertyName + '"');
9674 }
9675 }
9676
9677 return true;
9678 }
9679 object.toJSON = function () {
9680 return type;
9681 };
9682
9683 return object;
9684 },
9685
9686 oneOf: function oneOf() {
9687 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9688 types[_key] = arguments[_key];
9689 }
9690
9691 function oneOf(value, strict) {
9692 return types.some(function (type) {
9693 try {
9694 return typeforce(type, value, strict);
9695 } catch (e) {
9696 return false;
9697 }
9698 });
9699 }
9700 oneOf.toJSON = function () {
9701 return types.map(sJSON).join('|');
9702 };
9703
9704 return oneOf;
9705 },
9706
9707 quacksLike: function quacksLike(type) {
9708 function quacksLike(value, strict) {
9709 return type === getValueTypeName(value);
9710 }
9711 quacksLike.toJSON = function () {
9712 return type;
9713 };
9714
9715 return quacksLike;
9716 },
9717
9718 tuple: function tuple() {
9719 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9720 types[_key2] = arguments[_key2];
9721 }
9722
9723 function tuple(value, strict) {
9724 return types.every(function (type, i) {
9725 return typeforce(type, value[i], strict);
9726 });
9727 }
9728 tuple.toJSON = function () {
9729 return '(' + types.map(sJSON).join(', ') + ')';
9730 };
9731
9732 return tuple;
9733 },
9734
9735 value: function value(expected) {
9736 function value(actual) {
9737 return actual === expected;
9738 }
9739 value.toJSON = function () {
9740 return expected;
9741 };
9742
9743 return value;
9744 }
9745 };
9746
9747 function compile(type) {
9748 if (nativeTypes.String(type)) {
9749 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9750
9751 return nativeTypes[type] || otherTypes.quacksLike(type);
9752 } else if (type && nativeTypes.Object(type)) {
9753 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9754
9755 var compiled = {};
9756
9757 for (var propertyName in type) {
9758 compiled[propertyName] = compile(type[propertyName]);
9759 }
9760
9761 return otherTypes.object(compiled);
9762 } else if (nativeTypes.Function(type)) {
9763 return type;
9764 }
9765
9766 return otherTypes.value(type);
9767 }
9768
9769 function typeforce(_x3, _x4, _x5) {
9770 var _again = true;
9771
9772 _function: while (_again) {
9773 var type = _x3,
9774 value = _x4,
9775 strict = _x5;
9776 _again = false;
9777
9778 if (nativeTypes.Function(type)) {
9779 if (type(value, strict)) return true;
9780
9781 throw new TypeError(tfErrorString(type, value));
9782 }
9783
9784 // JIT
9785 _x3 = compile(type);
9786 _x4 = value;
9787 _x5 = strict;
9788 _again = true;
9789 continue _function;
9790 }
9791 }
9792
9793 // assign all types to typeforce function
9794 var typeName;
9795 Object.keys(nativeTypes).forEach(function (typeName) {
9796 var nativeType = nativeTypes[typeName];
9797 nativeType.toJSON = function () {
9798 return typeName;
9799 };
9800
9801 typeforce[typeName] = nativeType;
9802 });
9803
9804 for (typeName in otherTypes) {
9805 typeforce[typeName] = otherTypes[typeName];
9806 }
9807
9808 module.exports = typeforce;
9809 module.exports.compile = compile;
9810 }).call(this,require("buffer").Buffer)
9811 },{"buffer":7}],54:[function(require,module,exports){
9812 (function (Buffer){
9813 var assert = require('assert')
9814 var base58check = require('bs58check')
9815 var typeForce = require('typeforce')
9816 var networks = require('./networks')
9817 var scripts = require('./scripts')
9818
9819 function findScriptTypeByVersion (version) {
9820 for (var networkName in networks) {
9821 var network = networks[networkName]
9822
9823 if (version === network.pubKeyHash) return 'pubkeyhash'
9824 if (version === network.scriptHash) return 'scripthash'
9825 }
9826 }
9827
9828 function Address (hash, version) {
9829 typeForce('Buffer', hash)
9830
9831 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9832 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9833
9834 this.hash = hash
9835 this.version = version
9836 }
9837
9838 Address.fromBase58Check = function (string) {
9839 var payload = base58check.decode(string)
9840 var version = payload.readUInt8(0)
9841 var hash = payload.slice(1)
9842
9843 return new Address(hash, version)
9844 }
9845
9846 Address.fromOutputScript = function (script, network) {
9847 network = network || networks.bitcoin
9848
9849 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9850 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
9851
9852 assert(false, script.toASM() + ' has no matching Address')
9853 }
9854
9855 Address.prototype.toBase58Check = function () {
9856 var payload = new Buffer(21)
9857 payload.writeUInt8(this.version, 0)
9858 this.hash.copy(payload, 1)
9859
9860 return base58check.encode(payload)
9861 }
9862
9863 Address.prototype.toOutputScript = function () {
9864 var scriptType = findScriptTypeByVersion(this.version)
9865
9866 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9867 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9868
9869 assert(false, this.toString() + ' has no matching Script')
9870 }
9871
9872 Address.prototype.toString = Address.prototype.toBase58Check
9873
9874 module.exports = Address
9875
9876 }).call(this,require("buffer").Buffer)
9877 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9878 var bs58check = require('bs58check')
9879
9880 function decode () {
9881 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9882
9883 return bs58check.decode.apply(undefined, arguments)
9884 }
9885
9886 function encode () {
9887 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9888
9889 return bs58check.encode.apply(undefined, arguments)
9890 }
9891
9892 module.exports = {
9893 decode: decode,
9894 encode: encode
9895 }
9896
9897 },{"bs58check":31}],56:[function(require,module,exports){
9898 (function (Buffer){
9899 var assert = require('assert')
9900 var bufferutils = require('./bufferutils')
9901 var crypto = require('./crypto')
9902
9903 var Transaction = require('./transaction')
9904
9905 function Block () {
9906 this.version = 1
9907 this.prevHash = null
9908 this.merkleRoot = null
9909 this.timestamp = 0
9910 this.bits = 0
9911 this.nonce = 0
9912 }
9913
9914 Block.fromBuffer = function (buffer) {
9915 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9916
9917 var offset = 0
9918 function readSlice (n) {
9919 offset += n
9920 return buffer.slice(offset - n, offset)
9921 }
9922
9923 function readUInt32 () {
9924 var i = buffer.readUInt32LE(offset)
9925 offset += 4
9926 return i
9927 }
9928
9929 var block = new Block()
9930 block.version = readUInt32()
9931 block.prevHash = readSlice(32)
9932 block.merkleRoot = readSlice(32)
9933 block.timestamp = readUInt32()
9934 block.bits = readUInt32()
9935 block.nonce = readUInt32()
9936
9937 if (buffer.length === 80) return block
9938
9939 function readVarInt () {
9940 var vi = bufferutils.readVarInt(buffer, offset)
9941 offset += vi.size
9942 return vi.number
9943 }
9944
9945 // FIXME: poor performance
9946 function readTransaction () {
9947 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9948
9949 offset += tx.toBuffer().length
9950 return tx
9951 }
9952
9953 var nTransactions = readVarInt()
9954 block.transactions = []
9955
9956 for (var i = 0; i < nTransactions; ++i) {
9957 var tx = readTransaction()
9958 block.transactions.push(tx)
9959 }
9960
9961 return block
9962 }
9963
9964 Block.fromHex = function (hex) {
9965 return Block.fromBuffer(new Buffer(hex, 'hex'))
9966 }
9967
9968 Block.prototype.getHash = function () {
9969 return crypto.hash256(this.toBuffer(true))
9970 }
9971
9972 Block.prototype.getId = function () {
9973 return bufferutils.reverse(this.getHash()).toString('hex')
9974 }
9975
9976 Block.prototype.getUTCDate = function () {
9977 var date = new Date(0) // epoch
9978 date.setUTCSeconds(this.timestamp)
9979
9980 return date
9981 }
9982
9983 Block.prototype.toBuffer = function (headersOnly) {
9984 var buffer = new Buffer(80)
9985
9986 var offset = 0
9987 function writeSlice (slice) {
9988 slice.copy(buffer, offset)
9989 offset += slice.length
9990 }
9991
9992 function writeUInt32 (i) {
9993 buffer.writeUInt32LE(i, offset)
9994 offset += 4
9995 }
9996
9997 writeUInt32(this.version)
9998 writeSlice(this.prevHash)
9999 writeSlice(this.merkleRoot)
10000 writeUInt32(this.timestamp)
10001 writeUInt32(this.bits)
10002 writeUInt32(this.nonce)
10003
10004 if (headersOnly || !this.transactions) return buffer
10005
10006 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10007 var txBuffers = this.transactions.map(function (tx) {
10008 return tx.toBuffer()
10009 })
10010
10011 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10012 }
10013
10014 Block.prototype.toHex = function (headersOnly) {
10015 return this.toBuffer(headersOnly).toString('hex')
10016 }
10017
10018 module.exports = Block
10019
10020 }).call(this,require("buffer").Buffer)
10021 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10022 (function (Buffer){
10023 var assert = require('assert')
10024 var opcodes = require('./opcodes')
10025
10026 // https://github.com/feross/buffer/blob/master/index.js#L1127
10027 function verifuint (value, max) {
10028 assert(typeof value === 'number', 'cannot write a non-number as a number')
10029 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10030 assert(value <= max, 'value is larger than maximum value for type')
10031 assert(Math.floor(value) === value, 'value has a fractional component')
10032 }
10033
10034 function pushDataSize (i) {
10035 return i < opcodes.OP_PUSHDATA1 ? 1
10036 : i < 0xff ? 2
10037 : i < 0xffff ? 3
10038 : 5
10039 }
10040
10041 function readPushDataInt (buffer, offset) {
10042 var opcode = buffer.readUInt8(offset)
10043 var number, size
10044
10045 // ~6 bit
10046 if (opcode < opcodes.OP_PUSHDATA1) {
10047 number = opcode
10048 size = 1
10049
10050 // 8 bit
10051 } else if (opcode === opcodes.OP_PUSHDATA1) {
10052 if (offset + 2 > buffer.length) return null
10053 number = buffer.readUInt8(offset + 1)
10054 size = 2
10055
10056 // 16 bit
10057 } else if (opcode === opcodes.OP_PUSHDATA2) {
10058 if (offset + 3 > buffer.length) return null
10059 number = buffer.readUInt16LE(offset + 1)
10060 size = 3
10061
10062 // 32 bit
10063 } else {
10064 if (offset + 5 > buffer.length) return null
10065 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10066
10067 number = buffer.readUInt32LE(offset + 1)
10068 size = 5
10069 }
10070
10071 return {
10072 opcode: opcode,
10073 number: number,
10074 size: size
10075 }
10076 }
10077
10078 function readUInt64LE (buffer, offset) {
10079 var a = buffer.readUInt32LE(offset)
10080 var b = buffer.readUInt32LE(offset + 4)
10081 b *= 0x100000000
10082
10083 verifuint(b + a, 0x001fffffffffffff)
10084
10085 return b + a
10086 }
10087
10088 function readVarInt (buffer, offset) {
10089 var t = buffer.readUInt8(offset)
10090 var number, size
10091
10092 // 8 bit
10093 if (t < 253) {
10094 number = t
10095 size = 1
10096
10097 // 16 bit
10098 } else if (t < 254) {
10099 number = buffer.readUInt16LE(offset + 1)
10100 size = 3
10101
10102 // 32 bit
10103 } else if (t < 255) {
10104 number = buffer.readUInt32LE(offset + 1)
10105 size = 5
10106
10107 // 64 bit
10108 } else {
10109 number = readUInt64LE(buffer, offset + 1)
10110 size = 9
10111 }
10112
10113 return {
10114 number: number,
10115 size: size
10116 }
10117 }
10118
10119 function writePushDataInt (buffer, number, offset) {
10120 var size = pushDataSize(number)
10121
10122 // ~6 bit
10123 if (size === 1) {
10124 buffer.writeUInt8(number, offset)
10125
10126 // 8 bit
10127 } else if (size === 2) {
10128 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10129 buffer.writeUInt8(number, offset + 1)
10130
10131 // 16 bit
10132 } else if (size === 3) {
10133 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10134 buffer.writeUInt16LE(number, offset + 1)
10135
10136 // 32 bit
10137 } else {
10138 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10139 buffer.writeUInt32LE(number, offset + 1)
10140 }
10141
10142 return size
10143 }
10144
10145 function writeUInt64LE (buffer, value, offset) {
10146 verifuint(value, 0x001fffffffffffff)
10147
10148 buffer.writeInt32LE(value & -1, offset)
10149 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10150 }
10151
10152 function varIntSize (i) {
10153 return i < 253 ? 1
10154 : i < 0x10000 ? 3
10155 : i < 0x100000000 ? 5
10156 : 9
10157 }
10158
10159 function writeVarInt (buffer, number, offset) {
10160 var size = varIntSize(number)
10161
10162 // 8 bit
10163 if (size === 1) {
10164 buffer.writeUInt8(number, offset)
10165
10166 // 16 bit
10167 } else if (size === 3) {
10168 buffer.writeUInt8(253, offset)
10169 buffer.writeUInt16LE(number, offset + 1)
10170
10171 // 32 bit
10172 } else if (size === 5) {
10173 buffer.writeUInt8(254, offset)
10174 buffer.writeUInt32LE(number, offset + 1)
10175
10176 // 64 bit
10177 } else {
10178 buffer.writeUInt8(255, offset)
10179 writeUInt64LE(buffer, number, offset + 1)
10180 }
10181
10182 return size
10183 }
10184
10185 function varIntBuffer (i) {
10186 var size = varIntSize(i)
10187 var buffer = new Buffer(size)
10188 writeVarInt(buffer, i, 0)
10189
10190 return buffer
10191 }
10192
10193 function reverse (buffer) {
10194 var buffer2 = new Buffer(buffer)
10195 Array.prototype.reverse.call(buffer2)
10196 return buffer2
10197 }
10198
10199 module.exports = {
10200 pushDataSize: pushDataSize,
10201 readPushDataInt: readPushDataInt,
10202 readUInt64LE: readUInt64LE,
10203 readVarInt: readVarInt,
10204 reverse: reverse,
10205 varIntBuffer: varIntBuffer,
10206 varIntSize: varIntSize,
10207 writePushDataInt: writePushDataInt,
10208 writeUInt64LE: writeUInt64LE,
10209 writeVarInt: writeVarInt
10210 }
10211
10212 }).call(this,require("buffer").Buffer)
10213 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10214 var createHash = require('create-hash')
10215
10216 function hash160 (buffer) {
10217 return ripemd160(sha256(buffer))
10218 }
10219
10220 function hash256 (buffer) {
10221 return sha256(sha256(buffer))
10222 }
10223
10224 function ripemd160 (buffer) {
10225 return createHash('rmd160').update(buffer).digest()
10226 }
10227
10228 function sha1 (buffer) {
10229 return createHash('sha1').update(buffer).digest()
10230 }
10231
10232 function sha256 (buffer) {
10233 return createHash('sha256').update(buffer).digest()
10234 }
10235
10236 // FIXME: Name not consistent with others
10237 var createHmac = require('create-hmac')
10238
10239 function HmacSHA256 (buffer, secret) {
10240 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10241 return createHmac('sha256', secret).update(buffer).digest()
10242 }
10243
10244 function HmacSHA512 (buffer, secret) {
10245 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10246 return createHmac('sha512', secret).update(buffer).digest()
10247 }
10248
10249 module.exports = {
10250 ripemd160: ripemd160,
10251 sha1: sha1,
10252 sha256: sha256,
10253 hash160: hash160,
10254 hash256: hash256,
10255 HmacSHA256: HmacSHA256,
10256 HmacSHA512: HmacSHA512
10257 }
10258
10259 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10260 (function (Buffer){
10261 var assert = require('assert')
10262 var createHmac = require('create-hmac')
10263 var typeForce = require('typeforce')
10264
10265 var BigInteger = require('bigi')
10266 var ECSignature = require('./ecsignature')
10267
10268 var ZERO = new Buffer([0])
10269 var ONE = new Buffer([1])
10270
10271 // https://tools.ietf.org/html/rfc6979#section-3.2
10272 function deterministicGenerateK (curve, hash, d, checkSig) {
10273 typeForce('Buffer', hash)
10274 typeForce('BigInteger', d)
10275
10276 // FIXME: remove/uncomment for 2.0.0
10277 // typeForce('Function', checkSig)
10278
10279 if (typeof checkSig !== 'function') {
10280 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10281
10282 checkSig = function (k) {
10283 var G = curve.G
10284 var n = curve.n
10285 var e = BigInteger.fromBuffer(hash)
10286
10287 var Q = G.multiply(k)
10288
10289 if (curve.isInfinity(Q))
10290 return false
10291
10292 var r = Q.affineX.mod(n)
10293 if (r.signum() === 0)
10294 return false
10295
10296 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10297 if (s.signum() === 0)
10298 return false
10299
10300 return true
10301 }
10302 }
10303
10304 // sanity check
10305 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10306
10307 var x = d.toBuffer(32)
10308 var k = new Buffer(32)
10309 var v = new Buffer(32)
10310
10311 // Step A, ignored as hash already provided
10312 // Step B
10313 v.fill(1)
10314
10315 // Step C
10316 k.fill(0)
10317
10318 // Step D
10319 k = createHmac('sha256', k)
10320 .update(v)
10321 .update(ZERO)
10322 .update(x)
10323 .update(hash)
10324 .digest()
10325
10326 // Step E
10327 v = createHmac('sha256', k).update(v).digest()
10328
10329 // Step F
10330 k = createHmac('sha256', k)
10331 .update(v)
10332 .update(ONE)
10333 .update(x)
10334 .update(hash)
10335 .digest()
10336
10337 // Step G
10338 v = createHmac('sha256', k).update(v).digest()
10339
10340 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10341 // Step H2b
10342 v = createHmac('sha256', k).update(v).digest()
10343
10344 var T = BigInteger.fromBuffer(v)
10345
10346 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10347 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10348 k = createHmac('sha256', k)
10349 .update(v)
10350 .update(ZERO)
10351 .digest()
10352
10353 v = createHmac('sha256', k).update(v).digest()
10354
10355 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10356 // Step H2b again
10357 v = createHmac('sha256', k).update(v).digest()
10358 T = BigInteger.fromBuffer(v)
10359 }
10360
10361 return T
10362 }
10363
10364 function sign (curve, hash, d) {
10365 var r, s
10366
10367 var e = BigInteger.fromBuffer(hash)
10368 var n = curve.n
10369 var G = curve.G
10370
10371 deterministicGenerateK(curve, hash, d, function (k) {
10372 var Q = G.multiply(k)
10373
10374 if (curve.isInfinity(Q))
10375 return false
10376
10377 r = Q.affineX.mod(n)
10378 if (r.signum() === 0)
10379 return false
10380
10381 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10382 if (s.signum() === 0)
10383 return false
10384
10385 return true
10386 })
10387
10388 var N_OVER_TWO = n.shiftRight(1)
10389
10390 // enforce low S values, see bip62: 'low s values in signatures'
10391 if (s.compareTo(N_OVER_TWO) > 0) {
10392 s = n.subtract(s)
10393 }
10394
10395 return new ECSignature(r, s)
10396 }
10397
10398 function verifyRaw (curve, e, signature, Q) {
10399 var n = curve.n
10400 var G = curve.G
10401
10402 var r = signature.r
10403 var s = signature.s
10404
10405 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10406 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10407 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10408
10409 // c = s^-1 mod n
10410 var c = s.modInverse(n)
10411
10412 // 1.4.4 Compute u1 = es^−1 mod n
10413 // u2 = rs^−1 mod n
10414 var u1 = e.multiply(c).mod(n)
10415 var u2 = r.multiply(c).mod(n)
10416
10417 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10418 var R = G.multiplyTwo(u1, Q, u2)
10419 var v = R.affineX.mod(n)
10420
10421 // 1.4.5 (cont.) Enforce R is not at infinity
10422 if (curve.isInfinity(R)) return false
10423
10424 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10425 return v.equals(r)
10426 }
10427
10428 function verify (curve, hash, signature, Q) {
10429 // 1.4.2 H = Hash(M), already done by the user
10430 // 1.4.3 e = H
10431 var e = BigInteger.fromBuffer(hash)
10432
10433 return verifyRaw(curve, e, signature, Q)
10434 }
10435
10436 /**
10437 * Recover a public key from a signature.
10438 *
10439 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10440 * Key Recovery Operation".
10441 *
10442 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10443 */
10444 function recoverPubKey (curve, e, signature, i) {
10445 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10446
10447 var n = curve.n
10448 var G = curve.G
10449
10450 var r = signature.r
10451 var s = signature.s
10452
10453 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10454 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10455
10456 // A set LSB signifies that the y-coordinate is odd
10457 var isYOdd = i & 1
10458
10459 // The more significant bit specifies whether we should use the
10460 // first or second candidate key.
10461 var isSecondKey = i >> 1
10462
10463 // 1.1 Let x = r + jn
10464 var x = isSecondKey ? r.add(n) : r
10465 var R = curve.pointFromX(isYOdd, x)
10466
10467 // 1.4 Check that nR is at infinity
10468 var nR = R.multiply(n)
10469 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10470
10471 // Compute -e from e
10472 var eNeg = e.negate().mod(n)
10473
10474 // 1.6.1 Compute Q = r^-1 (sR - eG)
10475 // Q = r^-1 (sR + -eG)
10476 var rInv = r.modInverse(n)
10477
10478 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10479 curve.validate(Q)
10480
10481 return Q
10482 }
10483
10484 /**
10485 * Calculate pubkey extraction parameter.
10486 *
10487 * When extracting a pubkey from a signature, we have to
10488 * distinguish four different cases. Rather than putting this
10489 * burden on the verifier, Bitcoin includes a 2-bit value with the
10490 * signature.
10491 *
10492 * This function simply tries all four cases and returns the value
10493 * that resulted in a successful pubkey recovery.
10494 */
10495 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10496 for (var i = 0; i < 4; i++) {
10497 var Qprime = recoverPubKey(curve, e, signature, i)
10498
10499 // 1.6.2 Verify Q
10500 if (Qprime.equals(Q)) {
10501 return i
10502 }
10503 }
10504
10505 throw new Error('Unable to find valid recovery factor')
10506 }
10507
10508 module.exports = {
10509 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10510 deterministicGenerateK: deterministicGenerateK,
10511 recoverPubKey: recoverPubKey,
10512 sign: sign,
10513 verify: verify,
10514 verifyRaw: verifyRaw
10515 }
10516
10517 }).call(this,require("buffer").Buffer)
10518 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10519 (function (Buffer){
10520 var assert = require('assert')
10521 var base58check = require('bs58check')
10522 var ecdsa = require('./ecdsa')
10523 var networks = require('./networks')
10524 var randomBytes = require('randombytes')
10525 var typeForce = require('typeforce')
10526
10527 var BigInteger = require('bigi')
10528 var ECPubKey = require('./ecpubkey')
10529
10530 var ecurve = require('ecurve')
10531 var secp256k1 = ecurve.getCurveByName('secp256k1')
10532
10533 function ECKey (d, compressed) {
10534 assert(d.signum() > 0, 'Private key must be greater than 0')
10535 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10536
10537 var Q = ECKey.curve.G.multiply(d)
10538
10539 this.d = d
10540 this.pub = new ECPubKey(Q, compressed)
10541 }
10542
10543 // Constants
10544 ECKey.curve = secp256k1
10545
10546 // Static constructors
10547 ECKey.fromWIF = function (string) {
10548 var payload = base58check.decode(string)
10549 var compressed = false
10550
10551 // Ignore the version byte
10552 payload = payload.slice(1)
10553
10554 if (payload.length === 33) {
10555 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10556
10557 // Truncate the compression flag
10558 payload = payload.slice(0, -1)
10559 compressed = true
10560 }
10561
10562 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10563
10564 var d = BigInteger.fromBuffer(payload)
10565 return new ECKey(d, compressed)
10566 }
10567
10568 ECKey.makeRandom = function (compressed, rng) {
10569 rng = rng || randomBytes
10570
10571 var buffer = rng(32)
10572 typeForce('Buffer', buffer)
10573 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10574
10575 var d = BigInteger.fromBuffer(buffer)
10576 d = d.mod(ECKey.curve.n)
10577
10578 return new ECKey(d, compressed)
10579 }
10580
10581 // Export functions
10582 ECKey.prototype.toWIF = function (network) {
10583 network = network || networks.bitcoin
10584
10585 var bufferLen = this.pub.compressed ? 34 : 33
10586 var buffer = new Buffer(bufferLen)
10587
10588 buffer.writeUInt8(network.wif, 0)
10589 this.d.toBuffer(32).copy(buffer, 1)
10590
10591 if (this.pub.compressed) {
10592 buffer.writeUInt8(0x01, 33)
10593 }
10594
10595 return base58check.encode(buffer)
10596 }
10597
10598 // Operations
10599 ECKey.prototype.sign = function (hash) {
10600 return ecdsa.sign(ECKey.curve, hash, this.d)
10601 }
10602
10603 module.exports = ECKey
10604
10605 }).call(this,require("buffer").Buffer)
10606 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
10607 (function (Buffer){
10608 var crypto = require('./crypto')
10609 var ecdsa = require('./ecdsa')
10610 var typeForce = require('typeforce')
10611 var networks = require('./networks')
10612
10613 var Address = require('./address')
10614
10615 var ecurve = require('ecurve')
10616 var secp256k1 = ecurve.getCurveByName('secp256k1')
10617
10618 function ECPubKey (Q, compressed) {
10619 if (compressed === undefined) {
10620 compressed = true
10621 }
10622
10623 typeForce('Point', Q)
10624 typeForce('Boolean', compressed)
10625
10626 this.compressed = compressed
10627 this.Q = Q
10628 }
10629
10630 // Constants
10631 ECPubKey.curve = secp256k1
10632
10633 // Static constructors
10634 ECPubKey.fromBuffer = function (buffer) {
10635 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10636 return new ECPubKey(Q, Q.compressed)
10637 }
10638
10639 ECPubKey.fromHex = function (hex) {
10640 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10641 }
10642
10643 // Operations
10644 ECPubKey.prototype.getAddress = function (network) {
10645 network = network || networks.bitcoin
10646
10647 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10648 }
10649
10650 ECPubKey.prototype.verify = function (hash, signature) {
10651 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10652 }
10653
10654 // Export functions
10655 ECPubKey.prototype.toBuffer = function () {
10656 return this.Q.getEncoded(this.compressed)
10657 }
10658
10659 ECPubKey.prototype.toHex = function () {
10660 return this.toBuffer().toString('hex')
10661 }
10662
10663 module.exports = ECPubKey
10664
10665 }).call(this,require("buffer").Buffer)
10666 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10667 (function (Buffer){
10668 var assert = require('assert')
10669 var typeForce = require('typeforce')
10670
10671 var BigInteger = require('bigi')
10672
10673 function ECSignature (r, s) {
10674 typeForce('BigInteger', r)
10675 typeForce('BigInteger', s)
10676
10677 this.r = r
10678 this.s = s
10679 }
10680
10681 ECSignature.parseCompact = function (buffer) {
10682 assert.equal(buffer.length, 65, 'Invalid signature length')
10683 var i = buffer.readUInt8(0) - 27
10684
10685 // At most 3 bits
10686 assert.equal(i, i & 7, 'Invalid signature parameter')
10687 var compressed = !!(i & 4)
10688
10689 // Recovery param only
10690 i = i & 3
10691
10692 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10693 var s = BigInteger.fromBuffer(buffer.slice(33))
10694
10695 return {
10696 compressed: compressed,
10697 i: i,
10698 signature: new ECSignature(r, s)
10699 }
10700 }
10701
10702 ECSignature.fromDER = function (buffer) {
10703 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10704 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10705 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10706
10707 var rLen = buffer.readUInt8(3)
10708 assert(rLen > 0, 'R length is zero')
10709
10710 var offset = 4 + rLen
10711 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10712
10713 var sLen = buffer.readUInt8(offset + 1)
10714 assert(sLen > 0, 'S length is zero')
10715
10716 var rB = buffer.slice(4, offset)
10717 var sB = buffer.slice(offset + 2)
10718 offset += 2 + sLen
10719
10720 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10721 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10722 }
10723
10724 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10725 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10726 }
10727
10728 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10729 var r = BigInteger.fromDERInteger(rB)
10730 var s = BigInteger.fromDERInteger(sB)
10731
10732 assert(r.signum() >= 0, 'R value is negative')
10733 assert(s.signum() >= 0, 'S value is negative')
10734
10735 return new ECSignature(r, s)
10736 }
10737
10738 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10739 ECSignature.parseScriptSignature = function (buffer) {
10740 var hashType = buffer.readUInt8(buffer.length - 1)
10741 var hashTypeMod = hashType & ~0x80
10742
10743 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10744
10745 return {
10746 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10747 hashType: hashType
10748 }
10749 }
10750
10751 ECSignature.prototype.toCompact = function (i, compressed) {
10752 if (compressed) {
10753 i += 4
10754 }
10755
10756 i += 27
10757
10758 var buffer = new Buffer(65)
10759 buffer.writeUInt8(i, 0)
10760
10761 this.r.toBuffer(32).copy(buffer, 1)
10762 this.s.toBuffer(32).copy(buffer, 33)
10763
10764 return buffer
10765 }
10766
10767 ECSignature.prototype.toDER = function () {
10768 var rBa = this.r.toDERInteger()
10769 var sBa = this.s.toDERInteger()
10770
10771 var sequence = []
10772
10773 // INTEGER
10774 sequence.push(0x02, rBa.length)
10775 sequence = sequence.concat(rBa)
10776
10777 // INTEGER
10778 sequence.push(0x02, sBa.length)
10779 sequence = sequence.concat(sBa)
10780
10781 // SEQUENCE
10782 sequence.unshift(0x30, sequence.length)
10783
10784 return new Buffer(sequence)
10785 }
10786
10787 ECSignature.prototype.toScriptSignature = function (hashType) {
10788 var hashTypeMod = hashType & ~0x80
10789 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10790
10791 var hashTypeBuffer = new Buffer(1)
10792 hashTypeBuffer.writeUInt8(hashType, 0)
10793
10794 return Buffer.concat([this.toDER(), hashTypeBuffer])
10795 }
10796
10797 module.exports = ECSignature
10798
10799 }).call(this,require("buffer").Buffer)
10800 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
10801 (function (Buffer){
10802 var assert = require('assert')
10803 var base58check = require('bs58check')
10804 var bcrypto = require('./crypto')
10805 var createHmac = require('create-hmac')
10806 var typeForce = require('typeforce')
10807 var networks = require('./networks')
10808
10809 var BigInteger = require('bigi')
10810 var ECKey = require('./eckey')
10811 var ECPubKey = require('./ecpubkey')
10812
10813 var ecurve = require('ecurve')
10814 var curve = ecurve.getCurveByName('secp256k1')
10815
10816 function findBIP32NetworkByVersion (version) {
10817 for (var name in networks) {
10818 var network = networks[name]
10819
10820 if (version === network.bip32.private || version === network.bip32.public) {
10821 return network
10822 }
10823 }
10824
10825 assert(false, 'Could not find network for ' + version.toString(16))
10826 }
10827
10828 function HDNode (K, chainCode, network) {
10829 network = network || networks.bitcoin
10830
10831 typeForce('Buffer', chainCode)
10832
10833 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
10834 assert(network.bip32, 'Unknown BIP32 constants for network')
10835
10836 this.chainCode = chainCode
10837 this.depth = 0
10838 this.index = 0
10839 this.parentFingerprint = 0x00000000
10840 this.network = network
10841
10842 if (K instanceof BigInteger) {
10843 this.privKey = new ECKey(K, true)
10844 this.pubKey = this.privKey.pub
10845 } else if (K instanceof ECKey) {
10846 assert(K.pub.compressed, 'ECKey must be compressed')
10847 this.privKey = K
10848 this.pubKey = K.pub
10849 } else if (K instanceof ECPubKey) {
10850 assert(K.compressed, 'ECPubKey must be compressed')
10851 this.pubKey = K
10852 } else {
10853 this.pubKey = new ECPubKey(K, true)
10854 }
10855 }
10856
10857 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10858 HDNode.HIGHEST_BIT = 0x80000000
10859 HDNode.LENGTH = 78
10860
10861 HDNode.fromSeedBuffer = function (seed, network) {
10862 typeForce('Buffer', seed)
10863
10864 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10865 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10866
10867 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10868 var IL = I.slice(0, 32)
10869 var IR = I.slice(32)
10870
10871 // In case IL is 0 or >= n, the master key is invalid
10872 // This is handled by `new ECKey` in the HDNode constructor
10873 var pIL = BigInteger.fromBuffer(IL)
10874
10875 return new HDNode(pIL, IR, network)
10876 }
10877
10878 HDNode.fromSeedHex = function (hex, network) {
10879 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10880 }
10881
10882 HDNode.fromBase58 = function (string, network) {
10883 return HDNode.fromBuffer(base58check.decode(string), network, true)
10884 }
10885
10886 // FIXME: remove in 2.x.y
10887 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10888 if (!__ignoreDeprecation) {
10889 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10890 }
10891
10892 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10893
10894 // 4 byte: version bytes
10895 var version = buffer.readUInt32BE(0)
10896
10897 if (network) {
10898 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10899
10900 // auto-detect
10901 } else {
10902 network = findBIP32NetworkByVersion(version)
10903 }
10904
10905 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10906 var depth = buffer.readUInt8(4)
10907
10908 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10909 var parentFingerprint = buffer.readUInt32BE(5)
10910 if (depth === 0) {
10911 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10912 }
10913
10914 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10915 // This is encoded in MSB order. (0x00000000 if master key)
10916 var index = buffer.readUInt32BE(9)
10917 assert(depth > 0 || index === 0, 'Invalid index')
10918
10919 // 32 bytes: the chain code
10920 var chainCode = buffer.slice(13, 45)
10921 var data, hd
10922
10923 // 33 bytes: private key data (0x00 + k)
10924 if (version === network.bip32.private) {
10925 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
10926 data = buffer.slice(46, 78)
10927 var d = BigInteger.fromBuffer(data)
10928 hd = new HDNode(d, chainCode, network)
10929
10930 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10931 } else {
10932 data = buffer.slice(45, 78)
10933 var Q = ecurve.Point.decodeFrom(curve, data)
10934 assert.equal(Q.compressed, true, 'Invalid public key')
10935
10936 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10937 // If not, the extended public key is invalid.
10938 curve.validate(Q)
10939
10940 hd = new HDNode(Q, chainCode, network)
10941 }
10942
10943 hd.depth = depth
10944 hd.index = index
10945 hd.parentFingerprint = parentFingerprint
10946
10947 return hd
10948 }
10949
10950 // FIXME: remove in 2.x.y
10951 HDNode.fromHex = function (hex, network) {
10952 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10953 }
10954
10955 HDNode.prototype.getIdentifier = function () {
10956 return bcrypto.hash160(this.pubKey.toBuffer())
10957 }
10958
10959 HDNode.prototype.getFingerprint = function () {
10960 return this.getIdentifier().slice(0, 4)
10961 }
10962
10963 HDNode.prototype.getAddress = function () {
10964 return this.pubKey.getAddress(this.network)
10965 }
10966
10967 HDNode.prototype.neutered = function () {
10968 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10969 neutered.depth = this.depth
10970 neutered.index = this.index
10971 neutered.parentFingerprint = this.parentFingerprint
10972
10973 return neutered
10974 }
10975
10976 HDNode.prototype.toBase58 = function (isPrivate) {
10977 return base58check.encode(this.toBuffer(isPrivate, true))
10978 }
10979
10980 // FIXME: remove in 2.x.y
10981 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10982 if (isPrivate === undefined) {
10983 isPrivate = !!this.privKey
10984
10985 // FIXME: remove in 2.x.y
10986 } else {
10987 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10988 }
10989
10990 if (!__ignoreDeprecation) {
10991 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10992 }
10993
10994 // Version
10995 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10996 var buffer = new Buffer(HDNode.LENGTH)
10997
10998 // 4 bytes: version bytes
10999 buffer.writeUInt32BE(version, 0)
11000
11001 // Depth
11002 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11003 buffer.writeUInt8(this.depth, 4)
11004
11005 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11006 buffer.writeUInt32BE(this.parentFingerprint, 5)
11007
11008 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11009 // This is encoded in Big endian. (0x00000000 if master key)
11010 buffer.writeUInt32BE(this.index, 9)
11011
11012 // 32 bytes: the chain code
11013 this.chainCode.copy(buffer, 13)
11014
11015 // 33 bytes: the public key or private key data
11016 if (isPrivate) {
11017 // FIXME: remove in 2.x.y
11018 assert(this.privKey, 'Missing private key')
11019
11020 // 0x00 + k for private keys
11021 buffer.writeUInt8(0, 45)
11022 this.privKey.d.toBuffer(32).copy(buffer, 46)
11023 } else {
11024 // X9.62 encoding for public keys
11025 this.pubKey.toBuffer().copy(buffer, 45)
11026 }
11027
11028 return buffer
11029 }
11030
11031 // FIXME: remove in 2.x.y
11032 HDNode.prototype.toHex = function (isPrivate) {
11033 return this.toBuffer(isPrivate).toString('hex')
11034 }
11035
11036 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11037 HDNode.prototype.derive = function (index) {
11038 var isHardened = index >= HDNode.HIGHEST_BIT
11039 var indexBuffer = new Buffer(4)
11040 indexBuffer.writeUInt32BE(index, 0)
11041
11042 var data
11043
11044 // Hardened child
11045 if (isHardened) {
11046 assert(this.privKey, 'Could not derive hardened child key')
11047
11048 // data = 0x00 || ser256(kpar) || ser32(index)
11049 data = Buffer.concat([
11050 this.privKey.d.toBuffer(33),
11051 indexBuffer
11052 ])
11053
11054 // Normal child
11055 } else {
11056 // data = serP(point(kpar)) || ser32(index)
11057 // = serP(Kpar) || ser32(index)
11058 data = Buffer.concat([
11059 this.pubKey.toBuffer(),
11060 indexBuffer
11061 ])
11062 }
11063
11064 var I = createHmac('sha512', this.chainCode).update(data).digest()
11065 var IL = I.slice(0, 32)
11066 var IR = I.slice(32)
11067
11068 var pIL = BigInteger.fromBuffer(IL)
11069
11070 // In case parse256(IL) >= n, proceed with the next value for i
11071 if (pIL.compareTo(curve.n) >= 0) {
11072 return this.derive(index + 1)
11073 }
11074
11075 // Private parent key -> private child key
11076 var hd
11077 if (this.privKey) {
11078 // ki = parse256(IL) + kpar (mod n)
11079 var ki = pIL.add(this.privKey.d).mod(curve.n)
11080
11081 // In case ki == 0, proceed with the next value for i
11082 if (ki.signum() === 0) {
11083 return this.derive(index + 1)
11084 }
11085
11086 hd = new HDNode(ki, IR, this.network)
11087
11088 // Public parent key -> public child key
11089 } else {
11090 // Ki = point(parse256(IL)) + Kpar
11091 // = G*IL + Kpar
11092 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11093
11094 // In case Ki is the point at infinity, proceed with the next value for i
11095 if (curve.isInfinity(Ki)) {
11096 return this.derive(index + 1)
11097 }
11098
11099 hd = new HDNode(Ki, IR, this.network)
11100 }
11101
11102 hd.depth = this.depth + 1
11103 hd.index = index
11104 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11105
11106 return hd
11107 }
11108
11109 HDNode.prototype.deriveHardened = function (index) {
11110 // Only derives hardened private keys by default
11111 return this.derive(index + HDNode.HIGHEST_BIT)
11112 }
11113
11114 HDNode.prototype.toString = HDNode.prototype.toBase58
11115
11116 module.exports = HDNode
11117
11118 }).call(this,require("buffer").Buffer)
11119 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
11120 module.exports = {
11121 Address: require('./address'),
11122 base58check: require('./base58check'),
11123 Block: require('./block'),
11124 bufferutils: require('./bufferutils'),
11125 crypto: require('./crypto'),
11126 ecdsa: require('./ecdsa'),
11127 ECKey: require('./eckey'),
11128 ECPubKey: require('./ecpubkey'),
11129 ECSignature: require('./ecsignature'),
11130 Message: require('./message'),
11131 opcodes: require('./opcodes'),
11132 HDNode: require('./hdnode'),
11133 Script: require('./script'),
11134 scripts: require('./scripts'),
11135 Transaction: require('./transaction'),
11136 TransactionBuilder: require('./transaction_builder'),
11137 networks: require('./networks'),
11138 Wallet: require('./wallet')
11139 }
11140
11141 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
11142 (function (Buffer){
11143 var bufferutils = require('./bufferutils')
11144 var crypto = require('./crypto')
11145 var ecdsa = require('./ecdsa')
11146 var networks = require('./networks')
11147
11148 var BigInteger = require('bigi')
11149 var ECPubKey = require('./ecpubkey')
11150 var ECSignature = require('./ecsignature')
11151
11152 var ecurve = require('ecurve')
11153 var ecparams = ecurve.getCurveByName('secp256k1')
11154
11155 function magicHash (message, network) {
11156 var magicPrefix = new Buffer(network.magicPrefix)
11157 var messageBuffer = new Buffer(message)
11158 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11159
11160 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11161 return crypto.hash256(buffer)
11162 }
11163
11164 function sign (privKey, message, network) {
11165 network = network || networks.bitcoin
11166
11167 var hash = magicHash(message, network)
11168 var signature = privKey.sign(hash)
11169 var e = BigInteger.fromBuffer(hash)
11170 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11171
11172 return signature.toCompact(i, privKey.pub.compressed)
11173 }
11174
11175 // TODO: network could be implied from address
11176 function verify (address, signature, message, network) {
11177 if (!Buffer.isBuffer(signature)) {
11178 signature = new Buffer(signature, 'base64')
11179 }
11180
11181 network = network || networks.bitcoin
11182
11183 var hash = magicHash(message, network)
11184 var parsed = ECSignature.parseCompact(signature)
11185 var e = BigInteger.fromBuffer(hash)
11186 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11187
11188 var pubKey = new ECPubKey(Q, parsed.compressed)
11189 return pubKey.getAddress(network).toString() === address.toString()
11190 }
11191
11192 module.exports = {
11193 magicHash: magicHash,
11194 sign: sign,
11195 verify: verify
11196 }
11197
11198 }).call(this,require("buffer").Buffer)
11199 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11200 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11201 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11202
11203 var networks = {
11204 bitcoin: {
11205 magicPrefix: '\x18Bitcoin Signed Message:\n',
11206 bip32: {
11207 public: 0x0488b21e,
11208 private: 0x0488ade4
11209 },
11210 pubKeyHash: 0x00,
11211 scriptHash: 0x05,
11212 wif: 0x80,
11213 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11214 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11215 estimateFee: estimateFee('bitcoin')
11216 },
11217 testnet: {
11218 magicPrefix: '\x18Bitcoin Signed Message:\n',
11219 bip32: {
11220 public: 0x043587cf,
11221 private: 0x04358394
11222 },
11223 pubKeyHash: 0x6f,
11224 scriptHash: 0xc4,
11225 wif: 0xef,
11226 dustThreshold: 546,
11227 feePerKb: 10000,
11228 estimateFee: estimateFee('testnet')
11229 },
11230 litecoin: {
11231 magicPrefix: '\x19Litecoin Signed Message:\n',
11232 bip32: {
11233 public: 0x019da462,
11234 private: 0x019d9cfe
11235 },
11236 pubKeyHash: 0x30,
11237 scriptHash: 0x05,
11238 wif: 0xb0,
11239 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11240 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11241 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11242 estimateFee: estimateFee('litecoin')
11243 },
11244 dogecoin: {
11245 magicPrefix: '\x19Dogecoin Signed Message:\n',
11246 bip32: {
11247 public: 0x02facafd,
11248 private: 0x02fac398
11249 },
11250 pubKeyHash: 0x1e,
11251 scriptHash: 0x16,
11252 wif: 0x9e,
11253 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11254 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11255 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11256 estimateFee: estimateFee('dogecoin')
11257 },
11258 viacoin: {
11259 magicPrefix: '\x18Viacoin Signed Message:\n',
11260 bip32: {
11261 public: 0x0488b21e,
11262 private: 0x0488ade4
11263 },
11264 pubKeyHash: 0x47,
11265 scriptHash: 0x21,
11266 wif: 0xc7,
11267 dustThreshold: 560,
11268 dustSoftThreshold: 100000,
11269 feePerKb: 100000, //
11270 estimateFee: estimateFee('viacoin')
11271 },
11272 viacointestnet: {
11273 magicPrefix: '\x18Viacoin Signed Message:\n',
11274 bip32: {
11275 public: 0x043587cf,
11276 private: 0x04358394
11277 },
11278 pubKeyHash: 0x7f,
11279 scriptHash: 0xc4,
11280 wif: 0xff,
11281 dustThreshold: 560,
11282 dustSoftThreshold: 100000,
11283 feePerKb: 100000,
11284 estimateFee: estimateFee('viacointestnet')
11285 },
11286 gamerscoin: {
11287 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11288 bip32: {
11289 public: 0x019da462,
11290 private: 0x019d9cfe
11291 },
11292 pubKeyHash: 0x26,
11293 scriptHash: 0x05,
11294 wif: 0xA6,
11295 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11296 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11297 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11298 estimateFee: estimateFee('gamerscoin')
11299 },
11300 jumbucks: {
11301 magicPrefix: '\x19Jumbucks Signed Message:\n',
11302 bip32: {
11303 public: 0x037a689a,
11304 private: 0x037a6460
11305 },
11306 pubKeyHash: 0x2b,
11307 scriptHash: 0x05,
11308 wif: 0xab,
11309 dustThreshold: 0,
11310 dustSoftThreshold: 10000,
11311 feePerKb: 10000,
11312 estimateFee: estimateFee('jumbucks')
11313 },
11314 zetacoin: {
11315 magicPrefix: '\x18Zetacoin Signed Message:\n',
11316 bip32: {
11317 public: 0x0488b21e,
11318 private: 0x0488ade4
11319 },
11320 pubKeyHash: 0x50,
11321 scriptHash: 0x09,
11322 wif: 0xe0,
11323 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11324 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11325 estimateFee: estimateFee('zetacoin')
11326 }
11327 }
11328
11329 function estimateFee (type) {
11330 return function (tx) {
11331 var network = networks[type]
11332 var baseFee = network.feePerKb
11333 var byteSize = tx.toBuffer().length
11334
11335 var fee = baseFee * Math.ceil(byteSize / 1000)
11336 if (network.dustSoftThreshold === undefined) return fee
11337
11338 tx.outs.forEach(function (e) {
11339 if (e.value < network.dustSoftThreshold) {
11340 fee += baseFee
11341 }
11342 })
11343
11344 return fee
11345 }
11346 }
11347
11348 module.exports = networks
11349
11350 },{}],67:[function(require,module,exports){
11351 module.exports = {
11352 // push value
11353 OP_FALSE: 0,
11354 OP_0: 0,
11355 OP_PUSHDATA1: 76,
11356 OP_PUSHDATA2: 77,
11357 OP_PUSHDATA4: 78,
11358 OP_1NEGATE: 79,
11359 OP_RESERVED: 80,
11360 OP_1: 81,
11361 OP_TRUE: 81,
11362 OP_2: 82,
11363 OP_3: 83,
11364 OP_4: 84,
11365 OP_5: 85,
11366 OP_6: 86,
11367 OP_7: 87,
11368 OP_8: 88,
11369 OP_9: 89,
11370 OP_10: 90,
11371 OP_11: 91,
11372 OP_12: 92,
11373 OP_13: 93,
11374 OP_14: 94,
11375 OP_15: 95,
11376 OP_16: 96,
11377
11378 // control
11379 OP_NOP: 97,
11380 OP_VER: 98,
11381 OP_IF: 99,
11382 OP_NOTIF: 100,
11383 OP_VERIF: 101,
11384 OP_VERNOTIF: 102,
11385 OP_ELSE: 103,
11386 OP_ENDIF: 104,
11387 OP_VERIFY: 105,
11388 OP_RETURN: 106,
11389
11390 // stack ops
11391 OP_TOALTSTACK: 107,
11392 OP_FROMALTSTACK: 108,
11393 OP_2DROP: 109,
11394 OP_2DUP: 110,
11395 OP_3DUP: 111,
11396 OP_2OVER: 112,
11397 OP_2ROT: 113,
11398 OP_2SWAP: 114,
11399 OP_IFDUP: 115,
11400 OP_DEPTH: 116,
11401 OP_DROP: 117,
11402 OP_DUP: 118,
11403 OP_NIP: 119,
11404 OP_OVER: 120,
11405 OP_PICK: 121,
11406 OP_ROLL: 122,
11407 OP_ROT: 123,
11408 OP_SWAP: 124,
11409 OP_TUCK: 125,
11410
11411 // splice ops
11412 OP_CAT: 126,
11413 OP_SUBSTR: 127,
11414 OP_LEFT: 128,
11415 OP_RIGHT: 129,
11416 OP_SIZE: 130,
11417
11418 // bit logic
11419 OP_INVERT: 131,
11420 OP_AND: 132,
11421 OP_OR: 133,
11422 OP_XOR: 134,
11423 OP_EQUAL: 135,
11424 OP_EQUALVERIFY: 136,
11425 OP_RESERVED1: 137,
11426 OP_RESERVED2: 138,
11427
11428 // numeric
11429 OP_1ADD: 139,
11430 OP_1SUB: 140,
11431 OP_2MUL: 141,
11432 OP_2DIV: 142,
11433 OP_NEGATE: 143,
11434 OP_ABS: 144,
11435 OP_NOT: 145,
11436 OP_0NOTEQUAL: 146,
11437
11438 OP_ADD: 147,
11439 OP_SUB: 148,
11440 OP_MUL: 149,
11441 OP_DIV: 150,
11442 OP_MOD: 151,
11443 OP_LSHIFT: 152,
11444 OP_RSHIFT: 153,
11445
11446 OP_BOOLAND: 154,
11447 OP_BOOLOR: 155,
11448 OP_NUMEQUAL: 156,
11449 OP_NUMEQUALVERIFY: 157,
11450 OP_NUMNOTEQUAL: 158,
11451 OP_LESSTHAN: 159,
11452 OP_GREATERTHAN: 160,
11453 OP_LESSTHANOREQUAL: 161,
11454 OP_GREATERTHANOREQUAL: 162,
11455 OP_MIN: 163,
11456 OP_MAX: 164,
11457
11458 OP_WITHIN: 165,
11459
11460 // crypto
11461 OP_RIPEMD160: 166,
11462 OP_SHA1: 167,
11463 OP_SHA256: 168,
11464 OP_HASH160: 169,
11465 OP_HASH256: 170,
11466 OP_CODESEPARATOR: 171,
11467 OP_CHECKSIG: 172,
11468 OP_CHECKSIGVERIFY: 173,
11469 OP_CHECKMULTISIG: 174,
11470 OP_CHECKMULTISIGVERIFY: 175,
11471
11472 // expansion
11473 OP_NOP1: 176,
11474 OP_NOP2: 177,
11475 OP_NOP3: 178,
11476 OP_NOP4: 179,
11477 OP_NOP5: 180,
11478 OP_NOP6: 181,
11479 OP_NOP7: 182,
11480 OP_NOP8: 183,
11481 OP_NOP9: 184,
11482 OP_NOP10: 185,
11483
11484 // template matching params
11485 OP_PUBKEYHASH: 253,
11486 OP_PUBKEY: 254,
11487 OP_INVALIDOPCODE: 255
11488 }
11489
11490 },{}],68:[function(require,module,exports){
11491 (function (Buffer){
11492 var assert = require('assert')
11493 var bufferutils = require('./bufferutils')
11494 var crypto = require('./crypto')
11495 var typeForce = require('typeforce')
11496 var opcodes = require('./opcodes')
11497
11498 function Script (buffer, chunks) {
11499 typeForce('Buffer', buffer)
11500 typeForce('Array', chunks)
11501
11502 this.buffer = buffer
11503 this.chunks = chunks
11504 }
11505
11506 Script.fromASM = function (asm) {
11507 var strChunks = asm.split(' ')
11508 var chunks = strChunks.map(function (strChunk) {
11509 // opcode
11510 if (strChunk in opcodes) {
11511 return opcodes[strChunk]
11512
11513 // data chunk
11514 } else {
11515 return new Buffer(strChunk, 'hex')
11516 }
11517 })
11518
11519 return Script.fromChunks(chunks)
11520 }
11521
11522 Script.fromBuffer = function (buffer) {
11523 var chunks = []
11524 var i = 0
11525
11526 while (i < buffer.length) {
11527 var opcode = buffer.readUInt8(i)
11528
11529 // data chunk
11530 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11531 var d = bufferutils.readPushDataInt(buffer, i)
11532
11533 // did reading a pushDataInt fail? return non-chunked script
11534 if (d === null) return new Script(buffer, [])
11535 i += d.size
11536
11537 // attempt to read too much data?
11538 if (i + d.number > buffer.length) return new Script(buffer, [])
11539
11540 var data = buffer.slice(i, i + d.number)
11541 i += d.number
11542
11543 chunks.push(data)
11544
11545 // opcode
11546 } else {
11547 chunks.push(opcode)
11548
11549 i += 1
11550 }
11551 }
11552
11553 return new Script(buffer, chunks)
11554 }
11555
11556 Script.fromChunks = function (chunks) {
11557 typeForce('Array', chunks)
11558
11559 var bufferSize = chunks.reduce(function (accum, chunk) {
11560 // data chunk
11561 if (Buffer.isBuffer(chunk)) {
11562 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11563 }
11564
11565 // opcode
11566 return accum + 1
11567 }, 0.0)
11568
11569 var buffer = new Buffer(bufferSize)
11570 var offset = 0
11571
11572 chunks.forEach(function (chunk) {
11573 // data chunk
11574 if (Buffer.isBuffer(chunk)) {
11575 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11576
11577 chunk.copy(buffer, offset)
11578 offset += chunk.length
11579
11580 // opcode
11581 } else {
11582 buffer.writeUInt8(chunk, offset)
11583 offset += 1
11584 }
11585 })
11586
11587 assert.equal(offset, buffer.length, 'Could not decode chunks')
11588 return new Script(buffer, chunks)
11589 }
11590
11591 Script.fromHex = function (hex) {
11592 return Script.fromBuffer(new Buffer(hex, 'hex'))
11593 }
11594
11595 Script.EMPTY = Script.fromChunks([])
11596
11597 Script.prototype.getHash = function () {
11598 return crypto.hash160(this.buffer)
11599 }
11600
11601 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11602 Script.prototype.without = function (needle) {
11603 return Script.fromChunks(this.chunks.filter(function (op) {
11604 return op !== needle
11605 }))
11606 }
11607
11608 var reverseOps = []
11609 for (var op in opcodes) {
11610 var code = opcodes[op]
11611 reverseOps[code] = op
11612 }
11613
11614 Script.prototype.toASM = function () {
11615 return this.chunks.map(function (chunk) {
11616 // data chunk
11617 if (Buffer.isBuffer(chunk)) {
11618 return chunk.toString('hex')
11619
11620 // opcode
11621 } else {
11622 return reverseOps[chunk]
11623 }
11624 }).join(' ')
11625 }
11626
11627 Script.prototype.toBuffer = function () {
11628 return this.buffer
11629 }
11630
11631 Script.prototype.toHex = function () {
11632 return this.toBuffer().toString('hex')
11633 }
11634
11635 module.exports = Script
11636
11637 }).call(this,require("buffer").Buffer)
11638 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11639 (function (Buffer){
11640 var assert = require('assert')
11641 var ops = require('./opcodes')
11642 var typeForce = require('typeforce')
11643
11644 var ecurve = require('ecurve')
11645 var curve = ecurve.getCurveByName('secp256k1')
11646
11647 var ECSignature = require('./ecsignature')
11648 var Script = require('./script')
11649
11650 function isCanonicalPubKey (buffer) {
11651 if (!Buffer.isBuffer(buffer)) return false
11652
11653 try {
11654 ecurve.Point.decodeFrom(curve, buffer)
11655 } catch (e) {
11656 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11657 throw e
11658
11659 return false
11660 }
11661
11662 return true
11663 }
11664
11665 function isCanonicalSignature (buffer) {
11666 if (!Buffer.isBuffer(buffer)) return false
11667
11668 try {
11669 ECSignature.parseScriptSignature(buffer)
11670 } catch (e) {
11671 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
11672 throw e
11673 }
11674
11675 return false
11676 }
11677
11678 return true
11679 }
11680
11681 function isPubKeyHashInput (script) {
11682 return script.chunks.length === 2 &&
11683 isCanonicalSignature(script.chunks[0]) &&
11684 isCanonicalPubKey(script.chunks[1])
11685 }
11686
11687 function isPubKeyHashOutput (script) {
11688 return script.chunks.length === 5 &&
11689 script.chunks[0] === ops.OP_DUP &&
11690 script.chunks[1] === ops.OP_HASH160 &&
11691 Buffer.isBuffer(script.chunks[2]) &&
11692 script.chunks[2].length === 20 &&
11693 script.chunks[3] === ops.OP_EQUALVERIFY &&
11694 script.chunks[4] === ops.OP_CHECKSIG
11695 }
11696
11697 function isPubKeyInput (script) {
11698 return script.chunks.length === 1 &&
11699 isCanonicalSignature(script.chunks[0])
11700 }
11701
11702 function isPubKeyOutput (script) {
11703 return script.chunks.length === 2 &&
11704 isCanonicalPubKey(script.chunks[0]) &&
11705 script.chunks[1] === ops.OP_CHECKSIG
11706 }
11707
11708 function isScriptHashInput (script, allowIncomplete) {
11709 if (script.chunks.length < 2) return false
11710
11711 var lastChunk = script.chunks[script.chunks.length - 1]
11712 if (!Buffer.isBuffer(lastChunk)) return false
11713
11714 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11715 var redeemScript = Script.fromBuffer(lastChunk)
11716
11717 // is redeemScript a valid script?
11718 if (redeemScript.chunks.length === 0) return false
11719
11720 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11721 }
11722
11723 function isScriptHashOutput (script) {
11724 return script.chunks.length === 3 &&
11725 script.chunks[0] === ops.OP_HASH160 &&
11726 Buffer.isBuffer(script.chunks[1]) &&
11727 script.chunks[1].length === 20 &&
11728 script.chunks[2] === ops.OP_EQUAL
11729 }
11730
11731 // allowIncomplete is to account for combining signatures
11732 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11733 function isMultisigInput (script, allowIncomplete) {
11734 if (script.chunks.length < 2) return false
11735 if (script.chunks[0] !== ops.OP_0) return false
11736
11737 if (allowIncomplete) {
11738 return script.chunks.slice(1).every(function (chunk) {
11739 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11740 })
11741 }
11742
11743 return script.chunks.slice(1).every(isCanonicalSignature)
11744 }
11745
11746 function isMultisigOutput (script) {
11747 if (script.chunks.length < 4) return false
11748 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11749
11750 var mOp = script.chunks[0]
11751 if (mOp === ops.OP_0) return false
11752 if (mOp < ops.OP_1) return false
11753 if (mOp > ops.OP_16) return false
11754
11755 var nOp = script.chunks[script.chunks.length - 2]
11756 if (nOp === ops.OP_0) return false
11757 if (nOp < ops.OP_1) return false
11758 if (nOp > ops.OP_16) return false
11759
11760 var m = mOp - (ops.OP_1 - 1)
11761 var n = nOp - (ops.OP_1 - 1)
11762 if (n < m) return false
11763
11764 var pubKeys = script.chunks.slice(1, -2)
11765 if (n < pubKeys.length) return false
11766
11767 return pubKeys.every(isCanonicalPubKey)
11768 }
11769
11770 function isNullDataOutput (script) {
11771 return script.chunks[0] === ops.OP_RETURN
11772 }
11773
11774 function classifyOutput (script) {
11775 typeForce('Script', script)
11776
11777 if (isPubKeyHashOutput(script)) {
11778 return 'pubkeyhash'
11779 } else if (isScriptHashOutput(script)) {
11780 return 'scripthash'
11781 } else if (isMultisigOutput(script)) {
11782 return 'multisig'
11783 } else if (isPubKeyOutput(script)) {
11784 return 'pubkey'
11785 } else if (isNullDataOutput(script)) {
11786 return 'nulldata'
11787 }
11788
11789 return 'nonstandard'
11790 }
11791
11792 function classifyInput (script, allowIncomplete) {
11793 typeForce('Script', script)
11794
11795 if (isPubKeyHashInput(script)) {
11796 return 'pubkeyhash'
11797 } else if (isMultisigInput(script, allowIncomplete)) {
11798 return 'multisig'
11799 } else if (isScriptHashInput(script, allowIncomplete)) {
11800 return 'scripthash'
11801 } else if (isPubKeyInput(script)) {
11802 return 'pubkey'
11803 }
11804
11805 return 'nonstandard'
11806 }
11807
11808 // Standard Script Templates
11809 // {pubKey} OP_CHECKSIG
11810 function pubKeyOutput (pubKey) {
11811 return Script.fromChunks([
11812 pubKey.toBuffer(),
11813 ops.OP_CHECKSIG
11814 ])
11815 }
11816
11817 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11818 function pubKeyHashOutput (hash) {
11819 typeForce('Buffer', hash)
11820
11821 return Script.fromChunks([
11822 ops.OP_DUP,
11823 ops.OP_HASH160,
11824 hash,
11825 ops.OP_EQUALVERIFY,
11826 ops.OP_CHECKSIG
11827 ])
11828 }
11829
11830 // OP_HASH160 {scriptHash} OP_EQUAL
11831 function scriptHashOutput (hash) {
11832 typeForce('Buffer', hash)
11833
11834 return Script.fromChunks([
11835 ops.OP_HASH160,
11836 hash,
11837 ops.OP_EQUAL
11838 ])
11839 }
11840
11841 // m [pubKeys ...] n OP_CHECKMULTISIG
11842 function multisigOutput (m, pubKeys) {
11843 typeForce(['ECPubKey'], pubKeys)
11844
11845 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11846
11847 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11848 return pubKey.toBuffer()
11849 })
11850 var n = pubKeys.length
11851
11852 return Script.fromChunks([].concat(
11853 (ops.OP_1 - 1) + m,
11854 pubKeyBuffers,
11855 (ops.OP_1 - 1) + n,
11856 ops.OP_CHECKMULTISIG
11857 ))
11858 }
11859
11860 // {signature}
11861 function pubKeyInput (signature) {
11862 typeForce('Buffer', signature)
11863
11864 return Script.fromChunks([signature])
11865 }
11866
11867 // {signature} {pubKey}
11868 function pubKeyHashInput (signature, pubKey) {
11869 typeForce('Buffer', signature)
11870
11871 return Script.fromChunks([signature, pubKey.toBuffer()])
11872 }
11873
11874 // <scriptSig> {serialized scriptPubKey script}
11875 function scriptHashInput (scriptSig, scriptPubKey) {
11876 return Script.fromChunks([].concat(
11877 scriptSig.chunks,
11878 scriptPubKey.toBuffer()
11879 ))
11880 }
11881
11882 // OP_0 [signatures ...]
11883 function multisigInput (signatures, scriptPubKey) {
11884 if (scriptPubKey) {
11885 assert(isMultisigOutput(scriptPubKey))
11886
11887 var mOp = scriptPubKey.chunks[0]
11888 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11889 var m = mOp - (ops.OP_1 - 1)
11890 var n = nOp - (ops.OP_1 - 1)
11891
11892 assert(signatures.length >= m, 'Not enough signatures provided')
11893 assert(signatures.length <= n, 'Too many signatures provided')
11894 }
11895
11896 return Script.fromChunks([].concat(ops.OP_0, signatures))
11897 }
11898
11899 function nullDataOutput (data) {
11900 return Script.fromChunks([ops.OP_RETURN, data])
11901 }
11902
11903 module.exports = {
11904 isCanonicalPubKey: isCanonicalPubKey,
11905 isCanonicalSignature: isCanonicalSignature,
11906 isPubKeyHashInput: isPubKeyHashInput,
11907 isPubKeyHashOutput: isPubKeyHashOutput,
11908 isPubKeyInput: isPubKeyInput,
11909 isPubKeyOutput: isPubKeyOutput,
11910 isScriptHashInput: isScriptHashInput,
11911 isScriptHashOutput: isScriptHashOutput,
11912 isMultisigInput: isMultisigInput,
11913 isMultisigOutput: isMultisigOutput,
11914 isNullDataOutput: isNullDataOutput,
11915 classifyOutput: classifyOutput,
11916 classifyInput: classifyInput,
11917 pubKeyOutput: pubKeyOutput,
11918 pubKeyHashOutput: pubKeyHashOutput,
11919 scriptHashOutput: scriptHashOutput,
11920 multisigOutput: multisigOutput,
11921 pubKeyInput: pubKeyInput,
11922 pubKeyHashInput: pubKeyHashInput,
11923 scriptHashInput: scriptHashInput,
11924 multisigInput: multisigInput,
11925 dataOutput: function (data) {
11926 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11927 return nullDataOutput(data)
11928 },
11929 nullDataOutput: nullDataOutput
11930 }
11931
11932 }).call(this,require("buffer").Buffer)
11933 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
11934 (function (Buffer){
11935 var assert = require('assert')
11936 var bufferutils = require('./bufferutils')
11937 var crypto = require('./crypto')
11938 var typeForce = require('typeforce')
11939 var opcodes = require('./opcodes')
11940 var scripts = require('./scripts')
11941
11942 var Address = require('./address')
11943 var ECSignature = require('./ecsignature')
11944 var Script = require('./script')
11945
11946 function Transaction () {
11947 this.version = 1
11948 this.locktime = 0
11949 this.ins = []
11950 this.outs = []
11951 }
11952
11953 Transaction.DEFAULT_SEQUENCE = 0xffffffff
11954 Transaction.SIGHASH_ALL = 0x01
11955 Transaction.SIGHASH_NONE = 0x02
11956 Transaction.SIGHASH_SINGLE = 0x03
11957 Transaction.SIGHASH_ANYONECANPAY = 0x80
11958
11959 Transaction.fromBuffer = function (buffer, __disableAssert) {
11960 var offset = 0
11961 function readSlice (n) {
11962 offset += n
11963 return buffer.slice(offset - n, offset)
11964 }
11965
11966 function readUInt32 () {
11967 var i = buffer.readUInt32LE(offset)
11968 offset += 4
11969 return i
11970 }
11971
11972 function readUInt64 () {
11973 var i = bufferutils.readUInt64LE(buffer, offset)
11974 offset += 8
11975 return i
11976 }
11977
11978 function readVarInt () {
11979 var vi = bufferutils.readVarInt(buffer, offset)
11980 offset += vi.size
11981 return vi.number
11982 }
11983
11984 function readScript () {
11985 return Script.fromBuffer(readSlice(readVarInt()))
11986 }
11987
11988 function readGenerationScript () {
11989 return new Script(readSlice(readVarInt()), [])
11990 }
11991
11992 var tx = new Transaction()
11993 tx.version = readUInt32()
11994
11995 var vinLen = readVarInt()
11996 for (var i = 0; i < vinLen; ++i) {
11997 var hash = readSlice(32)
11998
11999 if (Transaction.isCoinbaseHash(hash)) {
12000 tx.ins.push({
12001 hash: hash,
12002 index: readUInt32(),
12003 script: readGenerationScript(),
12004 sequence: readUInt32()
12005 })
12006 } else {
12007 tx.ins.push({
12008 hash: hash,
12009 index: readUInt32(),
12010 script: readScript(),
12011 sequence: readUInt32()
12012 })
12013 }
12014 }
12015
12016 var voutLen = readVarInt()
12017 for (i = 0; i < voutLen; ++i) {
12018 tx.outs.push({
12019 value: readUInt64(),
12020 script: readScript()
12021 })
12022 }
12023
12024 tx.locktime = readUInt32()
12025
12026 if (!__disableAssert) {
12027 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12028 }
12029
12030 return tx
12031 }
12032
12033 Transaction.fromHex = function (hex) {
12034 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12035 }
12036
12037 Transaction.isCoinbaseHash = function (buffer) {
12038 return Array.prototype.every.call(buffer, function (x) {
12039 return x === 0
12040 })
12041 }
12042
12043 /**
12044 * Create a new txIn.
12045 *
12046 * Can be called with any of:
12047 *
12048 * - A transaction and an index
12049 * - A transaction hash and an index
12050 *
12051 * Note that this method does not sign the created input.
12052 */
12053 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12054 if (sequence === undefined || sequence === null) {
12055 sequence = Transaction.DEFAULT_SEQUENCE
12056 }
12057
12058 script = script || Script.EMPTY
12059
12060 if (typeof hash === 'string') {
12061 // TxId hex is big-endian, we need little-endian
12062 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12063 } else if (hash instanceof Transaction) {
12064 hash = hash.getHash()
12065 }
12066
12067 typeForce('Buffer', hash)
12068 typeForce('Number', index)
12069 typeForce('Number', sequence)
12070 typeForce('Script', script)
12071
12072 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12073
12074 // Add the input and return the input's index
12075 return (this.ins.push({
12076 hash: hash,
12077 index: index,
12078 script: script,
12079 sequence: sequence
12080 }) - 1)
12081 }
12082
12083 /**
12084 * Create a new txOut.
12085 *
12086 * Can be called with:
12087 *
12088 * - A base58 address string and a value
12089 * - An Address object and a value
12090 * - A scriptPubKey Script and a value
12091 */
12092 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12093 // Attempt to get a valid address if it's a base58 address string
12094 if (typeof scriptPubKey === 'string') {
12095 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12096 }
12097
12098 // Attempt to get a valid script if it's an Address object
12099 if (scriptPubKey instanceof Address) {
12100 scriptPubKey = scriptPubKey.toOutputScript()
12101 }
12102
12103 typeForce('Script', scriptPubKey)
12104 typeForce('Number', value)
12105
12106 // Add the output and return the output's index
12107 return (this.outs.push({
12108 script: scriptPubKey,
12109 value: value
12110 }) - 1)
12111 }
12112
12113 Transaction.prototype.clone = function () {
12114 var newTx = new Transaction()
12115 newTx.version = this.version
12116 newTx.locktime = this.locktime
12117
12118 newTx.ins = this.ins.map(function (txIn) {
12119 return {
12120 hash: txIn.hash,
12121 index: txIn.index,
12122 script: txIn.script,
12123 sequence: txIn.sequence
12124 }
12125 })
12126
12127 newTx.outs = this.outs.map(function (txOut) {
12128 return {
12129 script: txOut.script,
12130 value: txOut.value
12131 }
12132 })
12133
12134 return newTx
12135 }
12136
12137 /**
12138 * Hash transaction for signing a specific input.
12139 *
12140 * Bitcoin uses a different hash for each signed transaction input. This
12141 * method copies the transaction, makes the necessary changes based on the
12142 * hashType, serializes and finally hashes the result. This hash can then be
12143 * used to sign the transaction input in question.
12144 */
12145 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12146 // FIXME: remove in 2.x.y
12147 if (arguments[0] instanceof Script) {
12148 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12149
12150 // swap the arguments (must be stored in tmp, arguments is special)
12151 var tmp = arguments[0]
12152 inIndex = arguments[1]
12153 prevOutScript = tmp
12154 }
12155
12156 typeForce('Number', inIndex)
12157 typeForce('Script', prevOutScript)
12158 typeForce('Number', hashType)
12159
12160 assert(inIndex >= 0, 'Invalid vin index')
12161 assert(inIndex < this.ins.length, 'Invalid vin index')
12162
12163 var txTmp = this.clone()
12164 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12165
12166 // Blank out other inputs' signatures
12167 txTmp.ins.forEach(function (txIn) {
12168 txIn.script = Script.EMPTY
12169 })
12170 txTmp.ins[inIndex].script = hashScript
12171
12172 var hashTypeModifier = hashType & 0x1f
12173
12174 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12175 assert(false, 'SIGHASH_NONE not yet supported')
12176 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12177 assert(false, 'SIGHASH_SINGLE not yet supported')
12178 }
12179
12180 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12181 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12182 }
12183
12184 var hashTypeBuffer = new Buffer(4)
12185 hashTypeBuffer.writeInt32LE(hashType, 0)
12186
12187 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12188 return crypto.hash256(buffer)
12189 }
12190
12191 Transaction.prototype.getHash = function () {
12192 return crypto.hash256(this.toBuffer())
12193 }
12194
12195 Transaction.prototype.getId = function () {
12196 // TxHash is little-endian, we need big-endian
12197 return bufferutils.reverse(this.getHash()).toString('hex')
12198 }
12199
12200 Transaction.prototype.toBuffer = function () {
12201 function scriptSize (script) {
12202 var length = script.buffer.length
12203
12204 return bufferutils.varIntSize(length) + length
12205 }
12206
12207 var buffer = new Buffer(
12208 8 +
12209 bufferutils.varIntSize(this.ins.length) +
12210 bufferutils.varIntSize(this.outs.length) +
12211 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12212 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12213 )
12214
12215 var offset = 0
12216 function writeSlice (slice) {
12217 slice.copy(buffer, offset)
12218 offset += slice.length
12219 }
12220
12221 function writeUInt32 (i) {
12222 buffer.writeUInt32LE(i, offset)
12223 offset += 4
12224 }
12225
12226 function writeUInt64 (i) {
12227 bufferutils.writeUInt64LE(buffer, i, offset)
12228 offset += 8
12229 }
12230
12231 function writeVarInt (i) {
12232 var n = bufferutils.writeVarInt(buffer, i, offset)
12233 offset += n
12234 }
12235
12236 writeUInt32(this.version)
12237 writeVarInt(this.ins.length)
12238
12239 this.ins.forEach(function (txIn) {
12240 writeSlice(txIn.hash)
12241 writeUInt32(txIn.index)
12242 writeVarInt(txIn.script.buffer.length)
12243 writeSlice(txIn.script.buffer)
12244 writeUInt32(txIn.sequence)
12245 })
12246
12247 writeVarInt(this.outs.length)
12248 this.outs.forEach(function (txOut) {
12249 writeUInt64(txOut.value)
12250 writeVarInt(txOut.script.buffer.length)
12251 writeSlice(txOut.script.buffer)
12252 })
12253
12254 writeUInt32(this.locktime)
12255
12256 return buffer
12257 }
12258
12259 Transaction.prototype.toHex = function () {
12260 return this.toBuffer().toString('hex')
12261 }
12262
12263 Transaction.prototype.setInputScript = function (index, script) {
12264 typeForce('Number', index)
12265 typeForce('Script', script)
12266
12267 this.ins[index].script = script
12268 }
12269
12270 // FIXME: remove in 2.x.y
12271 Transaction.prototype.sign = function (index, privKey, hashType) {
12272 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12273
12274 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12275 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12276
12277 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12278 this.setInputScript(index, scriptSig)
12279 }
12280
12281 // FIXME: remove in 2.x.y
12282 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12283 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12284
12285 hashType = hashType || Transaction.SIGHASH_ALL
12286
12287 var hash = this.hashForSignature(index, prevOutScript, hashType)
12288 var signature = privKey.sign(hash)
12289
12290 return signature.toScriptSignature(hashType)
12291 }
12292
12293 // FIXME: remove in 2.x.y
12294 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12295 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12296
12297 var parsed = ECSignature.parseScriptSignature(buffer)
12298 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12299
12300 return pubKey.verify(hash, parsed.signature)
12301 }
12302
12303 module.exports = Transaction
12304
12305 }).call(this,require("buffer").Buffer)
12306 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
12307 (function (Buffer){
12308 var assert = require('assert')
12309 var ops = require('./opcodes')
12310 var scripts = require('./scripts')
12311
12312 var ECPubKey = require('./ecpubkey')
12313 var ECSignature = require('./ecsignature')
12314 var Script = require('./script')
12315 var Transaction = require('./transaction')
12316
12317 function extractInput (txIn) {
12318 var redeemScript
12319 var scriptSig = txIn.script
12320 var prevOutScript
12321 var prevOutType = scripts.classifyInput(scriptSig, true)
12322 var scriptType
12323
12324 // Re-classify if scriptHash
12325 if (prevOutType === 'scripthash') {
12326 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12327 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12328
12329 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12330 scriptType = scripts.classifyInput(scriptSig, true)
12331 } else {
12332 scriptType = prevOutType
12333 }
12334
12335 // Extract hashType, pubKeys and signatures
12336 var hashType, parsed, pubKeys, signatures
12337
12338 switch (scriptType) {
12339 case 'pubkeyhash': {
12340 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12341 hashType = parsed.hashType
12342 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12343 signatures = [parsed.signature]
12344 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12345
12346 break
12347 }
12348
12349 case 'pubkey': {
12350 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12351 hashType = parsed.hashType
12352 signatures = [parsed.signature]
12353
12354 if (redeemScript) {
12355 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12356 }
12357
12358 break
12359 }
12360
12361 case 'multisig': {
12362 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12363 if (chunk === ops.OP_0) return chunk
12364
12365 var parsed = ECSignature.parseScriptSignature(chunk)
12366 hashType = parsed.hashType
12367
12368 return parsed.signature
12369 })
12370
12371 if (redeemScript) {
12372 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12373 }
12374
12375 break
12376 }
12377 }
12378
12379 return {
12380 hashType: hashType,
12381 prevOutScript: prevOutScript,
12382 prevOutType: prevOutType,
12383 pubKeys: pubKeys,
12384 redeemScript: redeemScript,
12385 scriptType: scriptType,
12386 signatures: signatures
12387 }
12388 }
12389
12390 function TransactionBuilder () {
12391 this.prevTxMap = {}
12392 this.prevOutScripts = {}
12393 this.prevOutTypes = {}
12394
12395 this.inputs = []
12396 this.tx = new Transaction()
12397 }
12398
12399 TransactionBuilder.fromTransaction = function (transaction) {
12400 var txb = new TransactionBuilder()
12401
12402 // Copy other transaction fields
12403 txb.tx.version = transaction.version
12404 txb.tx.locktime = transaction.locktime
12405
12406 // Extract/add inputs
12407 transaction.ins.forEach(function (txIn) {
12408 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12409 })
12410
12411 // Extract/add outputs
12412 transaction.outs.forEach(function (txOut) {
12413 txb.addOutput(txOut.script, txOut.value)
12414 })
12415
12416 // Extract/add signatures
12417 txb.inputs = transaction.ins.map(function (txIn) {
12418 // TODO: remove me after testcase added
12419 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12420
12421 // Ignore empty scripts
12422 if (txIn.script.buffer.length === 0) return {}
12423
12424 return extractInput(txIn)
12425 })
12426
12427 return txb
12428 }
12429
12430 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12431 var prevOutHash
12432
12433 // txId
12434 if (typeof prevTx === 'string') {
12435 prevOutHash = new Buffer(prevTx, 'hex')
12436
12437 // TxId hex is big-endian, we want little-endian hash
12438 Array.prototype.reverse.call(prevOutHash)
12439
12440 // Transaction
12441 } else if (prevTx instanceof Transaction) {
12442 prevOutHash = prevTx.getHash()
12443 prevOutScript = prevTx.outs[index].script
12444
12445 // txHash
12446 } else {
12447 prevOutHash = prevTx
12448 }
12449
12450 var input = {}
12451 if (prevOutScript) {
12452 var prevOutType = scripts.classifyOutput(prevOutScript)
12453
12454 // if we can, extract pubKey information
12455 switch (prevOutType) {
12456 case 'multisig': {
12457 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12458 break
12459 }
12460
12461 case 'pubkey': {
12462 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12463 break
12464 }
12465 }
12466
12467 if (prevOutType !== 'scripthash') {
12468 input.scriptType = prevOutType
12469 }
12470
12471 input.prevOutScript = prevOutScript
12472 input.prevOutType = prevOutType
12473 }
12474
12475 assert(this.inputs.every(function (input2) {
12476 if (input2.hashType === undefined) return true
12477
12478 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12479 }), 'No, this would invalidate signatures')
12480
12481 var prevOut = prevOutHash.toString('hex') + ':' + index
12482 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12483
12484 var vin = this.tx.addInput(prevOutHash, index, sequence)
12485 this.inputs[vin] = input
12486 this.prevTxMap[prevOut] = vin
12487
12488 return vin
12489 }
12490
12491 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12492 assert(this.inputs.every(function (input) {
12493 if (input.hashType === undefined) return true
12494
12495 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12496 }), 'No, this would invalidate signatures')
12497
12498 return this.tx.addOutput(scriptPubKey, value)
12499 }
12500
12501 TransactionBuilder.prototype.build = function () {
12502 return this.__build(false)
12503 }
12504 TransactionBuilder.prototype.buildIncomplete = function () {
12505 return this.__build(true)
12506 }
12507
12508 var canSignTypes = {
12509 'pubkeyhash': true,
12510 'multisig': true,
12511 'pubkey': true
12512 }
12513
12514 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12515 if (!allowIncomplete) {
12516 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12517 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12518 }
12519
12520 var tx = this.tx.clone()
12521
12522 // Create script signatures from signature meta-data
12523 this.inputs.forEach(function (input, index) {
12524 var scriptType = input.scriptType
12525 var scriptSig
12526
12527 if (!allowIncomplete) {
12528 assert(!!scriptType, 'Transaction is not complete')
12529 assert(scriptType in canSignTypes, scriptType + ' not supported')
12530 assert(input.signatures, 'Transaction is missing signatures')
12531 }
12532
12533 if (input.signatures) {
12534 switch (scriptType) {
12535 case 'pubkeyhash': {
12536 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12537 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12538 break
12539 }
12540
12541 case 'multisig': {
12542 // Array.prototype.map is sparse-compatible
12543 var msSignatures = input.signatures.map(function (signature) {
12544 return signature && signature.toScriptSignature(input.hashType)
12545 })
12546
12547 // fill in blanks with OP_0
12548 if (allowIncomplete) {
12549 for (var i = 0; i < msSignatures.length; ++i) {
12550 if (msSignatures[i]) continue
12551
12552 msSignatures[i] = ops.OP_0
12553 }
12554 } else {
12555 // Array.prototype.filter returns non-sparse array
12556 msSignatures = msSignatures.filter(function (x) { return x })
12557 }
12558
12559 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12560 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12561 break
12562 }
12563
12564 case 'pubkey': {
12565 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12566 scriptSig = scripts.pubKeyInput(pkSignature)
12567 break
12568 }
12569 }
12570 }
12571
12572 // did we build a scriptSig?
12573 if (scriptSig) {
12574 // wrap as scriptHash if necessary
12575 if (input.prevOutType === 'scripthash') {
12576 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12577 }
12578
12579 tx.setInputScript(index, scriptSig)
12580 }
12581 })
12582
12583 return tx
12584 }
12585
12586 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12587 assert(index in this.inputs, 'No input at index: ' + index)
12588 hashType = hashType || Transaction.SIGHASH_ALL
12589
12590 var input = this.inputs[index]
12591 var canSign = input.hashType &&
12592 input.prevOutScript &&
12593 input.prevOutType &&
12594 input.pubKeys &&
12595 input.scriptType &&
12596 input.signatures
12597
12598 // are we almost ready to sign?
12599 if (canSign) {
12600 // if redeemScript was provided, enforce consistency
12601 if (redeemScript) {
12602 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12603 }
12604
12605 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12606
12607 // no? prepare
12608 } else {
12609 // must be pay-to-scriptHash?
12610 if (redeemScript) {
12611 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12612 if (input.prevOutScript) {
12613 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12614
12615 var scriptHash = input.prevOutScript.chunks[1]
12616 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12617 }
12618
12619 var scriptType = scripts.classifyOutput(redeemScript)
12620 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12621
12622 var pubKeys = []
12623 switch (scriptType) {
12624 case 'multisig': {
12625 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12626 break
12627 }
12628
12629 case 'pubkeyhash': {
12630 var pkh1 = redeemScript.chunks[2]
12631 var pkh2 = privKey.pub.getAddress().hash
12632
12633 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12634 pubKeys = [privKey.pub]
12635 break
12636 }
12637
12638 case 'pubkey': {
12639 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12640 break
12641 }
12642 }
12643
12644 if (!input.prevOutScript) {
12645 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12646 input.prevOutType = 'scripthash'
12647 }
12648
12649 input.pubKeys = pubKeys
12650 input.redeemScript = redeemScript
12651 input.scriptType = scriptType
12652
12653 // cannot be pay-to-scriptHash
12654 } else {
12655 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12656
12657 // can we otherwise sign this?
12658 if (input.scriptType) {
12659 assert(input.pubKeys, input.scriptType + ' not supported')
12660
12661 // we know nothin' Jon Snow, assume pubKeyHash
12662 } else {
12663 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12664 input.prevOutType = 'pubkeyhash'
12665 input.pubKeys = [privKey.pub]
12666 input.scriptType = input.prevOutType
12667 }
12668 }
12669
12670 input.hashType = hashType
12671 input.signatures = input.signatures || []
12672 }
12673
12674 var signatureScript = input.redeemScript || input.prevOutScript
12675 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12676
12677 // enforce signature order matches public keys
12678 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12679 // maintain a local copy of unmatched signatures
12680 var unmatched = input.signatures.slice()
12681
12682 input.signatures = input.pubKeys.map(function (pubKey) {
12683 var match
12684
12685 // check for any matching signatures
12686 unmatched.some(function (signature, i) {
12687 if (!pubKey.verify(signatureHash, signature)) return false
12688 match = signature
12689
12690 // remove matched signature from unmatched
12691 unmatched.splice(i, 1)
12692
12693 return true
12694 })
12695
12696 return match || undefined
12697 })
12698 }
12699
12700 // enforce in order signing of public keys
12701 assert(input.pubKeys.some(function (pubKey, i) {
12702 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12703
12704 assert(!input.signatures[i], 'Signature already exists')
12705 var signature = privKey.sign(signatureHash)
12706 input.signatures[i] = signature
12707
12708 return true
12709 }, this), 'privateKey cannot sign for this input')
12710 }
12711
12712 module.exports = TransactionBuilder
12713
12714 }).call(this,require("buffer").Buffer)
12715 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12716 (function (Buffer){
12717 var assert = require('assert')
12718 var bufferutils = require('./bufferutils')
12719 var typeForce = require('typeforce')
12720 var networks = require('./networks')
12721 var randomBytes = require('randombytes')
12722
12723 var Address = require('./address')
12724 var HDNode = require('./hdnode')
12725 var TransactionBuilder = require('./transaction_builder')
12726 var Script = require('./script')
12727
12728 function Wallet (seed, network) {
12729 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12730
12731 seed = seed || randomBytes(32)
12732 network = network || networks.bitcoin
12733
12734 // Stored in a closure to make accidental serialization less likely
12735 var masterKey = HDNode.fromSeedBuffer(seed, network)
12736
12737 // HD first-level child derivation method should be hardened
12738 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12739 var accountZero = masterKey.deriveHardened(0)
12740 var externalAccount = accountZero.derive(0)
12741 var internalAccount = accountZero.derive(1)
12742
12743 this.addresses = []
12744 this.changeAddresses = []
12745 this.network = network
12746 this.unspents = []
12747
12748 // FIXME: remove in 2.0.0
12749 this.unspentMap = {}
12750
12751 // FIXME: remove in 2.0.0
12752 var me = this
12753 this.newMasterKey = function (seed) {
12754 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12755
12756 seed = seed || randomBytes(32)
12757 masterKey = HDNode.fromSeedBuffer(seed, network)
12758
12759 accountZero = masterKey.deriveHardened(0)
12760 externalAccount = accountZero.derive(0)
12761 internalAccount = accountZero.derive(1)
12762
12763 me.addresses = []
12764 me.changeAddresses = []
12765
12766 me.unspents = []
12767 me.unspentMap = {}
12768 }
12769
12770 this.getMasterKey = function () {
12771 return masterKey
12772 }
12773 this.getAccountZero = function () {
12774 return accountZero
12775 }
12776 this.getExternalAccount = function () {
12777 return externalAccount
12778 }
12779 this.getInternalAccount = function () {
12780 return internalAccount
12781 }
12782 }
12783
12784 Wallet.prototype.createTransaction = function (to, value, options) {
12785 // FIXME: remove in 2.0.0
12786 if (typeof options !== 'object') {
12787 if (options !== undefined) {
12788 console.warn('Non options object parameters are deprecated, use options object instead')
12789
12790 options = {
12791 fixedFee: arguments[2],
12792 changeAddress: arguments[3]
12793 }
12794 }
12795 }
12796
12797 options = options || {}
12798
12799 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12800
12801 var changeAddress = options.changeAddress
12802 var fixedFee = options.fixedFee
12803 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
12804
12805 // filter by minConf, then pending and sort by descending value
12806 var unspents = this.unspents.filter(function (unspent) {
12807 return unspent.confirmations >= minConf
12808 }).filter(function (unspent) {
12809 return !unspent.pending
12810 }).sort(function (o1, o2) {
12811 return o2.value - o1.value
12812 })
12813
12814 var accum = 0
12815 var addresses = []
12816 var subTotal = value
12817
12818 var txb = new TransactionBuilder()
12819 txb.addOutput(to, value)
12820
12821 for (var i = 0; i < unspents.length; ++i) {
12822 var unspent = unspents[i]
12823 addresses.push(unspent.address)
12824
12825 txb.addInput(unspent.txHash, unspent.index)
12826
12827 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12828
12829 accum += unspent.value
12830 subTotal = value + fee
12831
12832 if (accum >= subTotal) {
12833 var change = accum - subTotal
12834
12835 if (change > this.network.dustThreshold) {
12836 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12837 }
12838
12839 break
12840 }
12841 }
12842
12843 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12844
12845 return this.signWith(txb, addresses).build()
12846 }
12847
12848 // FIXME: remove in 2.0.0
12849 Wallet.prototype.processPendingTx = function (tx) {
12850 this.__processTx(tx, true)
12851 }
12852
12853 // FIXME: remove in 2.0.0
12854 Wallet.prototype.processConfirmedTx = function (tx) {
12855 this.__processTx(tx, false)
12856 }
12857
12858 // FIXME: remove in 2.0.0
12859 Wallet.prototype.__processTx = function (tx, isPending) {
12860 console.warn('processTransaction is considered harmful, see issue #260 for more information')
12861
12862 var txId = tx.getId()
12863 var txHash = tx.getHash()
12864
12865 tx.outs.forEach(function (txOut, i) {
12866 var address
12867
12868 try {
12869 address = Address.fromOutputScript(txOut.script, this.network).toString()
12870 } catch (e) {
12871 if (!(e.message.match(/has no matching Address/)))
12872 throw e
12873 }
12874
12875 var myAddresses = this.addresses.concat(this.changeAddresses)
12876 if (myAddresses.indexOf(address) > -1) {
12877 var lookup = txId + ':' + i
12878 if (lookup in this.unspentMap) return
12879
12880 // its unique, add it
12881 var unspent = {
12882 address: address,
12883 confirmations: 0, // no way to determine this without more information
12884 index: i,
12885 txHash: txHash,
12886 txId: txId,
12887 value: txOut.value,
12888 pending: isPending
12889 }
12890
12891 this.unspentMap[lookup] = unspent
12892 this.unspents.push(unspent)
12893 }
12894 }, this)
12895
12896 tx.ins.forEach(function (txIn) {
12897 // copy and convert to big-endian hex
12898 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12899
12900 var lookup = txInId + ':' + txIn.index
12901 if (!(lookup in this.unspentMap)) return
12902
12903 var unspent = this.unspentMap[lookup]
12904
12905 if (isPending) {
12906 unspent.pending = true
12907 unspent.spent = true
12908 } else {
12909 delete this.unspentMap[lookup]
12910
12911 this.unspents = this.unspents.filter(function (unspent2) {
12912 return unspent !== unspent2
12913 })
12914 }
12915 }, this)
12916 }
12917
12918 Wallet.prototype.generateAddress = function () {
12919 var k = this.addresses.length
12920 var address = this.getExternalAccount().derive(k).getAddress()
12921
12922 this.addresses.push(address.toString())
12923
12924 return this.getReceiveAddress()
12925 }
12926
12927 Wallet.prototype.generateChangeAddress = function () {
12928 var k = this.changeAddresses.length
12929 var address = this.getInternalAccount().derive(k).getAddress()
12930
12931 this.changeAddresses.push(address.toString())
12932
12933 return this.getChangeAddress()
12934 }
12935
12936 Wallet.prototype.getAddress = function () {
12937 if (this.addresses.length === 0) {
12938 this.generateAddress()
12939 }
12940
12941 return this.addresses[this.addresses.length - 1]
12942 }
12943
12944 Wallet.prototype.getBalance = function (minConf) {
12945 minConf = minConf || 0
12946
12947 return this.unspents.filter(function (unspent) {
12948 return unspent.confirmations >= minConf
12949
12950 // FIXME: remove spent filter in 2.0.0
12951 }).filter(function (unspent) {
12952 return !unspent.spent
12953 }).reduce(function (accum, unspent) {
12954 return accum + unspent.value
12955 }, 0)
12956 }
12957
12958 Wallet.prototype.getChangeAddress = function () {
12959 if (this.changeAddresses.length === 0) {
12960 this.generateChangeAddress()
12961 }
12962
12963 return this.changeAddresses[this.changeAddresses.length - 1]
12964 }
12965
12966 Wallet.prototype.getInternalPrivateKey = function (index) {
12967 return this.getInternalAccount().derive(index).privKey
12968 }
12969
12970 Wallet.prototype.getPrivateKey = function (index) {
12971 return this.getExternalAccount().derive(index).privKey
12972 }
12973
12974 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12975 var index
12976
12977 if ((index = this.addresses.indexOf(address)) > -1) {
12978 return this.getPrivateKey(index)
12979 }
12980
12981 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12982 return this.getInternalPrivateKey(index)
12983 }
12984
12985 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12986 }
12987
12988 Wallet.prototype.getUnspentOutputs = function (minConf) {
12989 minConf = minConf || 0
12990
12991 return this.unspents.filter(function (unspent) {
12992 return unspent.confirmations >= minConf
12993
12994 // FIXME: remove spent filter in 2.0.0
12995 }).filter(function (unspent) {
12996 return !unspent.spent
12997 }).map(function (unspent) {
12998 return {
12999 address: unspent.address,
13000 confirmations: unspent.confirmations,
13001 index: unspent.index,
13002 txId: unspent.txId,
13003 value: unspent.value,
13004
13005 // FIXME: remove in 2.0.0
13006 hash: unspent.txId,
13007 pending: unspent.pending
13008 }
13009 })
13010 }
13011
13012 Wallet.prototype.setUnspentOutputs = function (unspents) {
13013 this.unspentMap = {}
13014 this.unspents = unspents.map(function (unspent) {
13015 // FIXME: remove unspent.hash in 2.0.0
13016 var txId = unspent.txId || unspent.hash
13017 var index = unspent.index
13018
13019 // FIXME: remove in 2.0.0
13020 if (unspent.hash !== undefined) {
13021 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13022 }
13023
13024 // FIXME: remove in 2.0.0
13025 if (index === undefined) {
13026 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13027 index = unspent.outputIndex
13028 }
13029
13030 typeForce('String', txId)
13031 typeForce('Number', index)
13032 typeForce('Number', unspent.value)
13033
13034 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13035 assert.doesNotThrow(function () {
13036 Address.fromBase58Check(unspent.address)
13037 }, 'Expected Base58 Address, got ' + unspent.address)
13038 assert(isFinite(index), 'Expected finite index, got ' + index)
13039
13040 // FIXME: remove branch in 2.0.0
13041 if (unspent.confirmations !== undefined) {
13042 typeForce('Number', unspent.confirmations)
13043 }
13044
13045 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13046
13047 unspent = {
13048 address: unspent.address,
13049 confirmations: unspent.confirmations || 0,
13050 index: index,
13051 txHash: txHash,
13052 txId: txId,
13053 value: unspent.value,
13054
13055 // FIXME: remove in 2.0.0
13056 pending: unspent.pending || false
13057 }
13058
13059 // FIXME: remove in 2.0.0
13060 this.unspentMap[txId + ':' + index] = unspent
13061
13062 return unspent
13063 }, this)
13064 }
13065
13066 Wallet.prototype.signWith = function (tx, addresses) {
13067 addresses.forEach(function (address, i) {
13068 var privKey = this.getPrivateKeyForAddress(address)
13069
13070 tx.sign(i, privKey)
13071 }, this)
13072
13073 return tx
13074 }
13075
13076 function estimatePaddedFee (tx, network) {
13077 var tmpTx = tx.clone()
13078 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13079
13080 return network.estimateFee(tmpTx)
13081 }
13082
13083 // FIXME: 1.0.0 shims, remove in 2.0.0
13084 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13085 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13086
13087 module.exports = Wallet
13088
13089 }).call(this,require("buffer").Buffer)
13090 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13091 });</script>
13092 <script>bitcoin.networks.shadow = {
13093 magicPrefix: '\x19ShadowCash Signed Message:\n',
13094 bip32: {
13095 public: 0xEE80286A,
13096 private: 0xEE8031E8
13097 },
13098 pubKeyHash: 0x3f,
13099 scriptHash: 0x7d,
13100 wif: 0xbf,
13101 dustThreshold: 0,
13102 feePerKb: 1000,
13103 estimateFee: function() { return "unused in this app" },
13104 };
13105
13106 bitcoin.networks.shadowtn = {
13107 magicPrefix: '\x19ShadowCash Signed Message:\n',
13108 bip32: {
13109 public: 0x76C0FDFB,
13110 private: 0x76C1077A
13111 },
13112 pubKeyHash: 0x7f,
13113 scriptHash: 0xc4,
13114 wif: 0xff,
13115 dustThreshold: 0,
13116 feePerKb: 1000,
13117 estimateFee: function() { return "unused in this app" },
13118 };
13119
13120 bitcoin.networks.clam = {
13121 bip32: {
13122 public: 0xa8c26d64,
13123 private: 0xa8c17826
13124 },
13125 pubKeyHash: 0x89,
13126 wif: 0x85,
13127 };
13128 </script>
13129 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13130
13131 //// base.js
13132
13133 /** @fileOverview Javascript cryptography implementation.
13134 *
13135 * Crush to remove comments, shorten variable names and
13136 * generally reduce transmission size.
13137 *
13138 * @author Emily Stark
13139 * @author Mike Hamburg
13140 * @author Dan Boneh
13141 */
13142
13143 "use strict";
13144 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13145 /*global document, window, escape, unescape, module, require, Uint32Array */
13146
13147 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13148 var sjcl = {
13149 /** @namespace Symmetric ciphers. */
13150 cipher: {},
13151
13152 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13153 hash: {},
13154
13155 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13156 keyexchange: {},
13157
13158 /** @namespace Block cipher modes of operation. */
13159 mode: {},
13160
13161 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13162 misc: {},
13163
13164 /**
13165 * @namespace Bit array encoders and decoders.
13166 *
13167 * @description
13168 * The members of this namespace are functions which translate between
13169 * SJCL's bitArrays and other objects (usually strings). Because it
13170 * isn't always clear which direction is encoding and which is decoding,
13171 * the method names are "fromBits" and "toBits".
13172 */
13173 codec: {},
13174
13175 /** @namespace Exceptions. */
13176 exception: {
13177 /** @constructor Ciphertext is corrupt. */
13178 corrupt: function(message) {
13179 this.toString = function() { return "CORRUPT: "+this.message; };
13180 this.message = message;
13181 },
13182
13183 /** @constructor Invalid parameter. */
13184 invalid: function(message) {
13185 this.toString = function() { return "INVALID: "+this.message; };
13186 this.message = message;
13187 },
13188
13189 /** @constructor Bug or missing feature in SJCL. @constructor */
13190 bug: function(message) {
13191 this.toString = function() { return "BUG: "+this.message; };
13192 this.message = message;
13193 },
13194
13195 /** @constructor Something isn't ready. */
13196 notReady: function(message) {
13197 this.toString = function() { return "NOT READY: "+this.message; };
13198 this.message = message;
13199 }
13200 }
13201 };
13202
13203 if(typeof module !== 'undefined' && module.exports){
13204 module.exports = sjcl;
13205 }
13206 if (typeof define === "function") {
13207 define([], function () {
13208 return sjcl;
13209 });
13210 }
13211
13212
13213 //// bitArray.js
13214
13215 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13216 *
13217 * @author Emily Stark
13218 * @author Mike Hamburg
13219 * @author Dan Boneh
13220 */
13221
13222 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13223 *
13224 * @description
13225 * <p>
13226 * These objects are the currency accepted by SJCL's crypto functions.
13227 * </p>
13228 *
13229 * <p>
13230 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13231 * but many of them can take arguments that are not a multiple of 4 bytes.
13232 * This library encodes arrays of bits (whose size need not be a multiple of 8
13233 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13234 * array of words, 32 bits at a time. Since the words are double-precision
13235 * floating point numbers, they fit some extra data. We use this (in a private,
13236 * possibly-changing manner) to encode the number of bits actually present
13237 * in the last word of the array.
13238 * </p>
13239 *
13240 * <p>
13241 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13242 * to ciphers like AES which want arrays of words.
13243 * </p>
13244 */
13245 sjcl.bitArray = {
13246 /**
13247 * Array slices in units of bits.
13248 * @param {bitArray} a The array to slice.
13249 * @param {Number} bstart The offset to the start of the slice, in bits.
13250 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13251 * slice until the end of the array.
13252 * @return {bitArray} The requested slice.
13253 */
13254 bitSlice: function (a, bstart, bend) {
13255 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13256 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13257 },
13258
13259 /**
13260 * Extract a number packed into a bit array.
13261 * @param {bitArray} a The array to slice.
13262 * @param {Number} bstart The offset to the start of the slice, in bits.
13263 * @param {Number} length The length of the number to extract.
13264 * @return {Number} The requested slice.
13265 */
13266 extract: function(a, bstart, blength) {
13267 // FIXME: this Math.floor is not necessary at all, but for some reason
13268 // seems to suppress a bug in the Chromium JIT.
13269 var x, sh = Math.floor((-bstart-blength) & 31);
13270 if ((bstart + blength - 1 ^ bstart) & -32) {
13271 // it crosses a boundary
13272 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13273 } else {
13274 // within a single word
13275 x = a[bstart/32|0] >>> sh;
13276 }
13277 return x & ((1<<blength) - 1);
13278 },
13279
13280 /**
13281 * Concatenate two bit arrays.
13282 * @param {bitArray} a1 The first array.
13283 * @param {bitArray} a2 The second array.
13284 * @return {bitArray} The concatenation of a1 and a2.
13285 */
13286 concat: function (a1, a2) {
13287 if (a1.length === 0 || a2.length === 0) {
13288 return a1.concat(a2);
13289 }
13290
13291 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13292 if (shift === 32) {
13293 return a1.concat(a2);
13294 } else {
13295 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13296 }
13297 },
13298
13299 /**
13300 * Find the length of an array of bits.
13301 * @param {bitArray} a The array.
13302 * @return {Number} The length of a, in bits.
13303 */
13304 bitLength: function (a) {
13305 var l = a.length, x;
13306 if (l === 0) { return 0; }
13307 x = a[l - 1];
13308 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13309 },
13310
13311 /**
13312 * Truncate an array.
13313 * @param {bitArray} a The array.
13314 * @param {Number} len The length to truncate to, in bits.
13315 * @return {bitArray} A new array, truncated to len bits.
13316 */
13317 clamp: function (a, len) {
13318 if (a.length * 32 < len) { return a; }
13319 a = a.slice(0, Math.ceil(len / 32));
13320 var l = a.length;
13321 len = len & 31;
13322 if (l > 0 && len) {
13323 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13324 }
13325 return a;
13326 },
13327
13328 /**
13329 * Make a partial word for a bit array.
13330 * @param {Number} len The number of bits in the word.
13331 * @param {Number} x The bits.
13332 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13333 * @return {Number} The partial word.
13334 */
13335 partial: function (len, x, _end) {
13336 if (len === 32) { return x; }
13337 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13338 },
13339
13340 /**
13341 * Get the number of bits used by a partial word.
13342 * @param {Number} x The partial word.
13343 * @return {Number} The number of bits used by the partial word.
13344 */
13345 getPartial: function (x) {
13346 return Math.round(x/0x10000000000) || 32;
13347 },
13348
13349 /**
13350 * Compare two arrays for equality in a predictable amount of time.
13351 * @param {bitArray} a The first array.
13352 * @param {bitArray} b The second array.
13353 * @return {boolean} true if a == b; false otherwise.
13354 */
13355 equal: function (a, b) {
13356 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13357 return false;
13358 }
13359 var x = 0, i;
13360 for (i=0; i<a.length; i++) {
13361 x |= a[i]^b[i];
13362 }
13363 return (x === 0);
13364 },
13365
13366 /** Shift an array right.
13367 * @param {bitArray} a The array to shift.
13368 * @param {Number} shift The number of bits to shift.
13369 * @param {Number} [carry=0] A byte to carry in
13370 * @param {bitArray} [out=[]] An array to prepend to the output.
13371 * @private
13372 */
13373 _shiftRight: function (a, shift, carry, out) {
13374 var i, last2=0, shift2;
13375 if (out === undefined) { out = []; }
13376
13377 for (; shift >= 32; shift -= 32) {
13378 out.push(carry);
13379 carry = 0;
13380 }
13381 if (shift === 0) {
13382 return out.concat(a);
13383 }
13384
13385 for (i=0; i<a.length; i++) {
13386 out.push(carry | a[i]>>>shift);
13387 carry = a[i] << (32-shift);
13388 }
13389 last2 = a.length ? a[a.length-1] : 0;
13390 shift2 = sjcl.bitArray.getPartial(last2);
13391 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13392 return out;
13393 },
13394
13395 /** xor a block of 4 words together.
13396 * @private
13397 */
13398 _xor4: function(x,y) {
13399 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13400 },
13401
13402 /** byteswap a word array inplace.
13403 * (does not handle partial words)
13404 * @param {sjcl.bitArray} a word array
13405 * @return {sjcl.bitArray} byteswapped array
13406 */
13407 byteswapM: function(a) {
13408 var i, v, m = 0xff00;
13409 for (i = 0; i < a.length; ++i) {
13410 v = a[i];
13411 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13412 }
13413 return a;
13414 }
13415 };
13416
13417
13418 //// codecString.js
13419
13420 /** @fileOverview Bit array codec implementations.
13421 *
13422 * @author Emily Stark
13423 * @author Mike Hamburg
13424 * @author Dan Boneh
13425 */
13426
13427 /** @namespace UTF-8 strings */
13428 sjcl.codec.utf8String = {
13429 /** Convert from a bitArray to a UTF-8 string. */
13430 fromBits: function (arr) {
13431 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13432 for (i=0; i<bl/8; i++) {
13433 if ((i&3) === 0) {
13434 tmp = arr[i/4];
13435 }
13436 out += String.fromCharCode(tmp >>> 24);
13437 tmp <<= 8;
13438 }
13439 return decodeURIComponent(escape(out));
13440 },
13441
13442 /** Convert from a UTF-8 string to a bitArray. */
13443 toBits: function (str) {
13444 str = unescape(encodeURIComponent(str));
13445 var out = [], i, tmp=0;
13446 for (i=0; i<str.length; i++) {
13447 tmp = tmp << 8 | str.charCodeAt(i);
13448 if ((i&3) === 3) {
13449 out.push(tmp);
13450 tmp = 0;
13451 }
13452 }
13453 if (i&3) {
13454 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13455 }
13456 return out;
13457 }
13458 };
13459
13460
13461 //// codecHex.js
13462
13463 /** @fileOverview Bit array codec implementations.
13464 *
13465 * @author Emily Stark
13466 * @author Mike Hamburg
13467 * @author Dan Boneh
13468 */
13469
13470 /** @namespace Hexadecimal */
13471 sjcl.codec.hex = {
13472 /** Convert from a bitArray to a hex string. */
13473 fromBits: function (arr) {
13474 var out = "", i;
13475 for (i=0; i<arr.length; i++) {
13476 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13477 }
13478 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13479 },
13480 /** Convert from a hex string to a bitArray. */
13481 toBits: function (str) {
13482 var i, out=[], len;
13483 str = str.replace(/\s|0x/g, "");
13484 len = str.length;
13485 str = str + "00000000";
13486 for (i=0; i<str.length; i+=8) {
13487 out.push(parseInt(str.substr(i,8),16)^0);
13488 }
13489 return sjcl.bitArray.clamp(out, len*4);
13490 }
13491 };
13492
13493
13494 //// sha512.js
13495
13496 /** @fileOverview Javascript SHA-512 implementation.
13497 *
13498 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13499 * SJCL by Stefan Thomas.
13500 *
13501 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13502 * Released with New BSD License
13503 *
13504 * @author Emily Stark
13505 * @author Mike Hamburg
13506 * @author Dan Boneh
13507 * @author Jeff Mott
13508 * @author Stefan Thomas
13509 */
13510
13511 /**
13512 * Context for a SHA-512 operation in progress.
13513 * @constructor
13514 * @class Secure Hash Algorithm, 512 bits.
13515 */
13516 sjcl.hash.sha512 = function (hash) {
13517 if (!this._key[0]) { this._precompute(); }
13518 if (hash) {
13519 this._h = hash._h.slice(0);
13520 this._buffer = hash._buffer.slice(0);
13521 this._length = hash._length;
13522 } else {
13523 this.reset();
13524 }
13525 };
13526
13527 /**
13528 * Hash a string or an array of words.
13529 * @static
13530 * @param {bitArray|String} data the data to hash.
13531 * @return {bitArray} The hash value, an array of 16 big-endian words.
13532 */
13533 sjcl.hash.sha512.hash = function (data) {
13534 return (new sjcl.hash.sha512()).update(data).finalize();
13535 };
13536
13537 sjcl.hash.sha512.prototype = {
13538 /**
13539 * The hash's block size, in bits.
13540 * @constant
13541 */
13542 blockSize: 1024,
13543
13544 /**
13545 * Reset the hash state.
13546 * @return this
13547 */
13548 reset:function () {
13549 this._h = this._init.slice(0);
13550 this._buffer = [];
13551 this._length = 0;
13552 return this;
13553 },
13554
13555 /**
13556 * Input several words to the hash.
13557 * @param {bitArray|String} data the data to hash.
13558 * @return this
13559 */
13560 update: function (data) {
13561 if (typeof data === "string") {
13562 data = sjcl.codec.utf8String.toBits(data);
13563 }
13564 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13565 ol = this._length,
13566 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13567 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13568 this._block(b.splice(0,32));
13569 }
13570 return this;
13571 },
13572
13573 /**
13574 * Complete hashing and output the hash value.
13575 * @return {bitArray} The hash value, an array of 16 big-endian words.
13576 */
13577 finalize:function () {
13578 var i, b = this._buffer, h = this._h;
13579
13580 // Round out and push the buffer
13581 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13582
13583 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13584 for (i = b.length + 4; i & 31; i++) {
13585 b.push(0);
13586 }
13587
13588 // append the length
13589 b.push(0);
13590 b.push(0);
13591 b.push(Math.floor(this._length / 0x100000000));
13592 b.push(this._length | 0);
13593
13594 while (b.length) {
13595 this._block(b.splice(0,32));
13596 }
13597
13598 this.reset();
13599 return h;
13600 },
13601
13602 /**
13603 * The SHA-512 initialization vector, to be precomputed.
13604 * @private
13605 */
13606 _init:[],
13607
13608 /**
13609 * Least significant 24 bits of SHA512 initialization values.
13610 *
13611 * Javascript only has 53 bits of precision, so we compute the 40 most
13612 * significant bits and add the remaining 24 bits as constants.
13613 *
13614 * @private
13615 */
13616 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13617
13618 /*
13619 _init:
13620 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13621 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13622 */
13623
13624 /**
13625 * The SHA-512 hash key, to be precomputed.
13626 * @private
13627 */
13628 _key:[],
13629
13630 /**
13631 * Least significant 24 bits of SHA512 key values.
13632 * @private
13633 */
13634 _keyr:
13635 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13636 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13637 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13638 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13639 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13640 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13641 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13642 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13643 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13644 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13645
13646 /*
13647 _key:
13648 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13649 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13650 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13651 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13652 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13653 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13654 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13655 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13656 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13657 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13658 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13659 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13660 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13661 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13662 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13663 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13664 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13665 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13666 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13667 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13668 */
13669
13670 /**
13671 * Function to precompute _init and _key.
13672 * @private
13673 */
13674 _precompute: function () {
13675 // XXX: This code is for precomputing the SHA256 constants, change for
13676 // SHA512 and re-enable.
13677 var i = 0, prime = 2, factor;
13678
13679 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13680 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13681
13682 outer: for (; i<80; prime++) {
13683 for (factor=2; factor*factor <= prime; factor++) {
13684 if (prime % factor === 0) {
13685 // not a prime
13686 continue outer;
13687 }
13688 }
13689
13690 if (i<8) {
13691 this._init[i*2] = frac(Math.pow(prime, 1/2));
13692 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13693 }
13694 this._key[i*2] = frac(Math.pow(prime, 1/3));
13695 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13696 i++;
13697 }
13698 },
13699
13700 /**
13701 * Perform one cycle of SHA-512.
13702 * @param {bitArray} words one block of words.
13703 * @private
13704 */
13705 _block:function (words) {
13706 var i, wrh, wrl,
13707 w = words.slice(0),
13708 h = this._h,
13709 k = this._key,
13710 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13711 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13712 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13713 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13714
13715 // Working variables
13716 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13717 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13718 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13719 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13720
13721 for (i=0; i<80; i++) {
13722 // load up the input word for this round
13723 if (i<16) {
13724 wrh = w[i * 2];
13725 wrl = w[i * 2 + 1];
13726 } else {
13727 // Gamma0
13728 var gamma0xh = w[(i-15) * 2];
13729 var gamma0xl = w[(i-15) * 2 + 1];
13730 var gamma0h =
13731 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13732 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13733 (gamma0xh >>> 7);
13734 var gamma0l =
13735 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13736 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13737 ((gamma0xh << 25) | (gamma0xl >>> 7));
13738
13739 // Gamma1
13740 var gamma1xh = w[(i-2) * 2];
13741 var gamma1xl = w[(i-2) * 2 + 1];
13742 var gamma1h =
13743 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13744 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13745 (gamma1xh >>> 6);
13746 var gamma1l =
13747 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13748 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13749 ((gamma1xh << 26) | (gamma1xl >>> 6));
13750
13751 // Shortcuts
13752 var wr7h = w[(i-7) * 2];
13753 var wr7l = w[(i-7) * 2 + 1];
13754
13755 var wr16h = w[(i-16) * 2];
13756 var wr16l = w[(i-16) * 2 + 1];
13757
13758 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13759 wrl = gamma0l + wr7l;
13760 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13761 wrl += gamma1l;
13762 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13763 wrl += wr16l;
13764 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13765 }
13766
13767 w[i*2] = wrh |= 0;
13768 w[i*2 + 1] = wrl |= 0;
13769
13770 // Ch
13771 var chh = (eh & fh) ^ (~eh & gh);
13772 var chl = (el & fl) ^ (~el & gl);
13773
13774 // Maj
13775 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13776 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13777
13778 // Sigma0
13779 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13780 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13781
13782 // Sigma1
13783 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13784 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13785
13786 // K(round)
13787 var krh = k[i*2];
13788 var krl = k[i*2+1];
13789
13790 // t1 = h + sigma1 + ch + K(round) + W(round)
13791 var t1l = hl + sigma1l;
13792 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13793 t1l += chl;
13794 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13795 t1l += krl;
13796 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13797 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13798 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13799
13800 // t2 = sigma0 + maj
13801 var t2l = sigma0l + majl;
13802 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13803
13804 // Update working variables
13805 hh = gh;
13806 hl = gl;
13807 gh = fh;
13808 gl = fl;
13809 fh = eh;
13810 fl = el;
13811 el = (dl + t1l) | 0;
13812 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13813 dh = ch;
13814 dl = cl;
13815 ch = bh;
13816 cl = bl;
13817 bh = ah;
13818 bl = al;
13819 al = (t1l + t2l) | 0;
13820 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13821 }
13822
13823 // Intermediate hash
13824 h0l = h[1] = (h0l + al) | 0;
13825 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13826 h1l = h[3] = (h1l + bl) | 0;
13827 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13828 h2l = h[5] = (h2l + cl) | 0;
13829 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13830 h3l = h[7] = (h3l + dl) | 0;
13831 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13832 h4l = h[9] = (h4l + el) | 0;
13833 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13834 h5l = h[11] = (h5l + fl) | 0;
13835 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13836 h6l = h[13] = (h6l + gl) | 0;
13837 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13838 h7l = h[15] = (h7l + hl) | 0;
13839 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13840 }
13841 };
13842
13843
13844 //// hmac.js
13845
13846 /** @fileOverview HMAC implementation.
13847 *
13848 * @author Emily Stark
13849 * @author Mike Hamburg
13850 * @author Dan Boneh
13851 */
13852
13853 /** HMAC with the specified hash function.
13854 * @constructor
13855 * @param {bitArray} key the key for HMAC.
13856 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13857 */
13858 sjcl.misc.hmac = function (key, Hash) {
13859 this._hash = Hash = Hash || sjcl.hash.sha256;
13860 var exKey = [[],[]], i,
13861 bs = Hash.prototype.blockSize / 32;
13862 this._baseHash = [new Hash(), new Hash()];
13863
13864 if (key.length > bs) {
13865 key = Hash.hash(key);
13866 }
13867
13868 for (i=0; i<bs; i++) {
13869 exKey[0][i] = key[i]^0x36363636;
13870 exKey[1][i] = key[i]^0x5C5C5C5C;
13871 }
13872
13873 this._baseHash[0].update(exKey[0]);
13874 this._baseHash[1].update(exKey[1]);
13875 this._resultHash = new Hash(this._baseHash[0]);
13876 };
13877
13878 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13879 * @param {bitArray|String} data The data to mac.
13880 */
13881 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13882 if (!this._updated) {
13883 this.update(data);
13884 return this.digest(data);
13885 } else {
13886 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13887 }
13888 };
13889
13890 sjcl.misc.hmac.prototype.reset = function () {
13891 this._resultHash = new this._hash(this._baseHash[0]);
13892 this._updated = false;
13893 };
13894
13895 sjcl.misc.hmac.prototype.update = function (data) {
13896 this._updated = true;
13897 this._resultHash.update(data);
13898 };
13899
13900 sjcl.misc.hmac.prototype.digest = function () {
13901 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13902
13903 this.reset();
13904
13905 return result;
13906 };
13907
13908
13909 //// pbkdf2.js
13910
13911
13912 /** @fileOverview Password-based key-derivation function, version 2.0.
13913 *
13914 * @author Emily Stark
13915 * @author Mike Hamburg
13916 * @author Dan Boneh
13917 */
13918
13919 /** Password-Based Key-Derivation Function, version 2.0.
13920 *
13921 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13922 *
13923 * This is the method specified by RSA's PKCS #5 standard.
13924 *
13925 * @param {bitArray|String} password The password.
13926 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13927 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13928 * @param {Number} [length] The length of the derived key. Defaults to the
13929 output size of the hash function.
13930 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13931 * @return {bitArray} the derived key.
13932 */
13933 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13934 count = count || 1000;
13935
13936 if (length < 0 || count < 0) {
13937 throw sjcl.exception.invalid("invalid params to pbkdf2");
13938 }
13939
13940 if (typeof password === "string") {
13941 password = sjcl.codec.utf8String.toBits(password);
13942 }
13943
13944 if (typeof salt === "string") {
13945 salt = sjcl.codec.utf8String.toBits(salt);
13946 }
13947
13948 Prff = Prff || sjcl.misc.hmac;
13949
13950 var prf = new Prff(password),
13951 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13952
13953 for (k = 1; 32 * out.length < (length || 1); k++) {
13954 u = ui = prf.encrypt(b.concat(salt,[k]));
13955
13956 for (i=1; i<count; i++) {
13957 ui = prf.encrypt(ui);
13958 for (j=0; j<ui.length; j++) {
13959 u[j] ^= ui[j];
13960 }
13961 }
13962
13963 out = out.concat(u);
13964 }
13965
13966 if (length) { out = b.clamp(out, length); }
13967
13968 return out;
13969 };
13970
13971
13972 //// sha256.js
13973
13974 /** @fileOverview Javascript SHA-256 implementation.
13975 *
13976 * An older version of this implementation is available in the public
13977 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13978 * Stanford University 2008-2010 and BSD-licensed for liability
13979 * reasons.
13980 *
13981 * Special thanks to Aldo Cortesi for pointing out several bugs in
13982 * this code.
13983 *
13984 * @author Emily Stark
13985 * @author Mike Hamburg
13986 * @author Dan Boneh
13987 */
13988
13989 /**
13990 * Context for a SHA-256 operation in progress.
13991 * @constructor
13992 * @class Secure Hash Algorithm, 256 bits.
13993 */
13994 sjcl.hash.sha256 = function (hash) {
13995 if (!this._key[0]) { this._precompute(); }
13996 if (hash) {
13997 this._h = hash._h.slice(0);
13998 this._buffer = hash._buffer.slice(0);
13999 this._length = hash._length;
14000 } else {
14001 this.reset();
14002 }
14003 };
14004
14005 /**
14006 * Hash a string or an array of words.
14007 * @static
14008 * @param {bitArray|String} data the data to hash.
14009 * @return {bitArray} The hash value, an array of 16 big-endian words.
14010 */
14011 sjcl.hash.sha256.hash = function (data) {
14012 return (new sjcl.hash.sha256()).update(data).finalize();
14013 };
14014
14015 sjcl.hash.sha256.prototype = {
14016 /**
14017 * The hash's block size, in bits.
14018 * @constant
14019 */
14020 blockSize: 512,
14021
14022 /**
14023 * Reset the hash state.
14024 * @return this
14025 */
14026 reset:function () {
14027 this._h = this._init.slice(0);
14028 this._buffer = [];
14029 this._length = 0;
14030 return this;
14031 },
14032
14033 /**
14034 * Input several words to the hash.
14035 * @param {bitArray|String} data the data to hash.
14036 * @return this
14037 */
14038 update: function (data) {
14039 if (typeof data === "string") {
14040 data = sjcl.codec.utf8String.toBits(data);
14041 }
14042 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14043 ol = this._length,
14044 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14045 for (i = 512+ol & -512; i <= nl; i+= 512) {
14046 this._block(b.splice(0,16));
14047 }
14048 return this;
14049 },
14050
14051 /**
14052 * Complete hashing and output the hash value.
14053 * @return {bitArray} The hash value, an array of 8 big-endian words.
14054 */
14055 finalize:function () {
14056 var i, b = this._buffer, h = this._h;
14057
14058 // Round out and push the buffer
14059 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14060
14061 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14062 for (i = b.length + 2; i & 15; i++) {
14063 b.push(0);
14064 }
14065
14066 // append the length
14067 b.push(Math.floor(this._length / 0x100000000));
14068 b.push(this._length | 0);
14069
14070 while (b.length) {
14071 this._block(b.splice(0,16));
14072 }
14073
14074 this.reset();
14075 return h;
14076 },
14077
14078 /**
14079 * The SHA-256 initialization vector, to be precomputed.
14080 * @private
14081 */
14082 _init:[],
14083 /*
14084 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14085 */
14086
14087 /**
14088 * The SHA-256 hash key, to be precomputed.
14089 * @private
14090 */
14091 _key:[],
14092 /*
14093 _key:
14094 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14095 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14096 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14097 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14098 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14099 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14100 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14101 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14102 */
14103
14104
14105 /**
14106 * Function to precompute _init and _key.
14107 * @private
14108 */
14109 _precompute: function () {
14110 var i = 0, prime = 2, factor;
14111
14112 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14113
14114 outer: for (; i<64; prime++) {
14115 for (factor=2; factor*factor <= prime; factor++) {
14116 if (prime % factor === 0) {
14117 // not a prime
14118 continue outer;
14119 }
14120 }
14121
14122 if (i<8) {
14123 this._init[i] = frac(Math.pow(prime, 1/2));
14124 }
14125 this._key[i] = frac(Math.pow(prime, 1/3));
14126 i++;
14127 }
14128 },
14129
14130 /**
14131 * Perform one cycle of SHA-256.
14132 * @param {bitArray} words one block of words.
14133 * @private
14134 */
14135 _block:function (words) {
14136 var i, tmp, a, b,
14137 w = words.slice(0),
14138 h = this._h,
14139 k = this._key,
14140 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14141 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14142
14143 /* Rationale for placement of |0 :
14144 * If a value can overflow is original 32 bits by a factor of more than a few
14145 * million (2^23 ish), there is a possibility that it might overflow the
14146 * 53-bit mantissa and lose precision.
14147 *
14148 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14149 * propagates around the loop, and on the hash state h[]. I don't believe
14150 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14151 * (for h4 anyway), and better safe than sorry.
14152 *
14153 * The clamps on h[] are necessary for the output to be correct even in the
14154 * common case and for short inputs.
14155 */
14156 for (i=0; i<64; i++) {
14157 // load up the input word for this round
14158 if (i<16) {
14159 tmp = w[i];
14160 } else {
14161 a = w[(i+1 ) & 15];
14162 b = w[(i+14) & 15];
14163 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14164 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14165 w[i&15] + w[(i+9) & 15]) | 0;
14166 }
14167
14168 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14169
14170 // shift register
14171 h7 = h6; h6 = h5; h5 = h4;
14172 h4 = h3 + tmp | 0;
14173 h3 = h2; h2 = h1; h1 = h0;
14174
14175 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14176 }
14177
14178 h[0] = h[0]+h0 | 0;
14179 h[1] = h[1]+h1 | 0;
14180 h[2] = h[2]+h2 | 0;
14181 h[3] = h[3]+h3 | 0;
14182 h[4] = h[4]+h4 | 0;
14183 h[5] = h[5]+h5 | 0;
14184 h[6] = h[6]+h6 | 0;
14185 h[7] = h[7]+h7 | 0;
14186 }
14187 };
14188 </script>
14189 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14190 WORDLISTS["english"] = [
14191 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14192 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14193 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14194 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14195 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14196 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14197 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14198 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14199 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14200 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14201 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14202 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14203 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14204 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14205 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14206 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14207 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14208 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14209 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14210 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14211 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14212 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14213 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14214 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14215 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14216 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14217 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14218 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14219 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14220 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14221 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14222 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14223 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14224 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14225 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14226 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14227 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14228 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14229 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14230 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14231 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14232 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14233 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14234 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14235 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14236 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14237 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14238 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14239 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14240 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14241 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14242 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14243 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14244 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14245 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14246 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14247 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14248 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14249 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14250 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14251 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14252 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14253 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14254 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14255 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14256 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14257 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14258 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14259 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14260 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14261 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14262 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14263 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14264 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14265 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14266 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14267 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14268 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14269 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14270 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14271 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14272 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14273 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14274 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14275 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14276 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14277 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14278 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14279 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14280 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14281 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14282 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14283 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14284 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14285 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14286 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14287 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14288 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14289 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14290 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14291 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14292 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14293 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14294 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14295 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14296 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14297 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14298 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14299 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14300 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14301 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14302 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14303 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14304 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14305 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14306 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14307 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14308 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14309 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14310 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14311 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14312 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14313 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14314 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14315 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14316 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14317 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14318 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14319 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14320 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14321 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14322 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14323 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14324 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14325 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14326 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14327 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14328 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14329 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14330 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14331 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14332 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14333 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14334 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14335 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14336 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14337 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14338 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14339 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14340 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14341 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14342 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14343 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14344 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14345 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14346 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14347 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14348 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14349 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14350 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14351 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14352 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14353 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14354 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14355 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14356 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14357 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14358 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14359 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14360 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14361 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14362 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14363 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14364 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14365 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14366 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14367 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14368 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14369 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14370 "thank","that","theme","then","theory","there","they","thing","this","thought",
14371 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14372 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14373 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14374 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14375 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14376 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14377 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14378 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14379 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14380 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14381 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14382 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14383 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14384 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14385 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14386 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14387 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14388 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14389 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14390 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14391 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14392 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14393 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14394 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14395 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14396 </script>
14397 <script>/*
14398 * Copyright (c) 2013 Pavol Rusnak
14399 *
14400 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14401 * this software and associated documentation files (the "Software"), to deal in
14402 * the Software without restriction, including without limitation the rights to
14403 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14404 * of the Software, and to permit persons to whom the Software is furnished to do
14405 * so, subject to the following conditions:
14406 *
14407 * The above copyright notice and this permission notice shall be included in all
14408 * copies or substantial portions of the Software.
14409 *
14410 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14411 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14412 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14413 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14414 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14415 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14416 */
14417
14418 /*
14419 * Javascript port from python by Ian Coleman
14420 *
14421 * Requires code from sjcl
14422 * https://github.com/bitwiseshiftleft/sjcl
14423 */
14424
14425 var Mnemonic = function(language) {
14426
14427 var PBKDF2_ROUNDS = 2048;
14428 var RADIX = 2048;
14429
14430 var self = this;
14431 var wordlist = [];
14432
14433 var hmacSHA512 = function(key) {
14434 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14435 this.encrypt = function() {
14436 return hasher.encrypt.apply(hasher, arguments);
14437 };
14438 };
14439
14440 function init() {
14441 wordlist = WORDLISTS[language];
14442 if (wordlist.length != RADIX) {
14443 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14444 throw err;
14445 }
14446 }
14447
14448 self.generate = function(strength) {
14449 strength = strength || 128;
14450 var r = strength % 32;
14451 if (r > 0) {
14452 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14453 }
14454 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14455 if (!hasStrongCrypto) {
14456 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14457 }
14458 var buffer = new Uint8Array(strength / 8);
14459 var data = crypto.getRandomValues(buffer);
14460 return self.toMnemonic(data);
14461 }
14462
14463 self.toMnemonic = function(byteArray) {
14464 if (byteArray.length % 4 > 0) {
14465 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14466 }
14467
14468 //h = hashlib.sha256(data).hexdigest()
14469 var data = byteArrayToWordArray(byteArray);
14470 var hash = sjcl.hash.sha256.hash(data);
14471 var h = sjcl.codec.hex.fromBits(hash);
14472
14473 // b is a binary string, eg '00111010101100...'
14474 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14475 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14476 //
14477 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14478 // c = bin(int(h, 16))[2:].zfill(256)
14479 // d = c[:len(data) * 8 / 32]
14480 var a = byteArrayToBinaryString(byteArray);
14481 var c = zfill(hexStringToBinaryString(h), 256);
14482 var d = c.substring(0, byteArray.length * 8 / 32);
14483 // b = line1 + line2
14484 var b = a + d;
14485
14486 var result = [];
14487 var blen = b.length / 11;
14488 for (var i=0; i<blen; i++) {
14489 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14490 result.push(wordlist[idx]);
14491 }
14492 return result.join(' ');
14493 }
14494
14495 self.check = function(mnemonic) {
14496 var mnemonic = mnemonic.split(' ')
14497 if (mnemonic.length % 3 > 0) {
14498 return false
14499 }
14500 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14501 var idx = [];
14502 for (var i=0; i<mnemonic.length; i++) {
14503 var word = mnemonic[i];
14504 var wordIndex = wordlist.indexOf(word);
14505 if (wordIndex == -1) {
14506 return false;
14507 }
14508 var binaryIndex = zfill(wordIndex.toString(2), 11);
14509 idx.push(binaryIndex);
14510 }
14511 var b = idx.join('');
14512 var l = b.length;
14513 //d = b[:l / 33 * 32]
14514 //h = b[-l / 33:]
14515 var d = b.substring(0, l / 33 * 32);
14516 var h = b.substring(l - l / 33, l);
14517 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14518 var nd = binaryStringToWordArray(d);
14519 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14520 var ndHash = sjcl.hash.sha256.hash(nd);
14521 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14522 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14523 var nh = ndBstr.substring(0,l/33);
14524 return h == nh;
14525 }
14526
14527 self.toSeed = function(mnemonic, passphrase) {
14528 passphrase = passphrase || '';
14529 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14530 passphrase = self.normalizeString(passphrase)
14531 passphrase = "mnemonic" + passphrase;
14532 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14533 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14534 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14535 var hashHex = sjcl.codec.hex.fromBits(result);
14536 return hashHex;
14537 }
14538
14539 self.normalizeString = function(str) {
14540 if (typeof str.normalize == "function") {
14541 return str.normalize("NFKD");
14542 }
14543 else {
14544 // TODO decide how to handle this in the future.
14545 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14546 return str;
14547 }
14548 }
14549
14550 function byteArrayToWordArray(data) {
14551 var a = [];
14552 for (var i=0; i<data.length/4; i++) {
14553 v = 0;
14554 v += data[i*4 + 0] << 8 * 3;
14555 v += data[i*4 + 1] << 8 * 2;
14556 v += data[i*4 + 2] << 8 * 1;
14557 v += data[i*4 + 3] << 8 * 0;
14558 a.push(v);
14559 }
14560 return a;
14561 }
14562
14563 function byteArrayToBinaryString(data) {
14564 var bin = "";
14565 for (var i=0; i<data.length; i++) {
14566 bin += zfill(data[i].toString(2), 8);
14567 }
14568 return bin;
14569 }
14570
14571 function hexStringToBinaryString(hexString) {
14572 binaryString = "";
14573 for (var i=0; i<hexString.length; i++) {
14574 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14575 }
14576 return binaryString;
14577 }
14578
14579 function binaryStringToWordArray(binary) {
14580 var aLen = binary.length / 32;
14581 var a = [];
14582 for (var i=0; i<aLen; i++) {
14583 var valueStr = binary.substring(0,32);
14584 var value = parseInt(valueStr, 2);
14585 a.push(value);
14586 binary = binary.slice(32);
14587 }
14588 return a;
14589 }
14590
14591 // Pad a numeric string on the left with zero digits until the given width
14592 // is reached.
14593 // Note this differs to the python implementation because it does not
14594 // handle numbers starting with a sign.
14595 function zfill(source, length) {
14596 source = source.toString();
14597 while (source.length < length) {
14598 source = '0' + source;
14599 }
14600 return source;
14601 }
14602
14603 init();
14604
14605 }
14606 </script>
14607 <script>(function() {
14608
14609 var mnemonic = new Mnemonic("english");
14610 var seed = null
14611 var bip32RootKey = null;
14612 var bip32ExtendedKey = null;
14613 var network = bitcoin.networks.bitcoin;
14614 var addressRowTemplate = $("#address-row-template");
14615
14616 var showIndex = true;
14617 var showAddress = true;
14618 var showPrivKey = true;
14619
14620 var phraseChangeTimeoutEvent = null;
14621
14622 var DOM = {};
14623 DOM.network = $(".network");
14624 DOM.phraseNetwork = $("#network-phrase");
14625 DOM.phrase = $(".phrase");
14626 DOM.passphrase = $(".passphrase");
14627 DOM.generate = $(".generate");
14628 DOM.seed = $(".seed");
14629 DOM.rootKey = $(".root-key");
14630 DOM.extendedPrivKey = $(".extended-priv-key");
14631 DOM.extendedPubKey = $(".extended-pub-key");
14632 DOM.bip32tab = $("#bip32-tab");
14633 DOM.bip44tab = $("#bip44-tab");
14634 DOM.bip32panel = $("#bip32");
14635 DOM.bip44panel = $("#bip44");
14636 DOM.bip32path = $("#bip32-path");
14637 DOM.bip44path = $("#bip44-path");
14638 DOM.bip44purpose = $("#bip44 .purpose");
14639 DOM.bip44coin = $("#bip44 .coin");
14640 DOM.bip44account = $("#bip44 .account");
14641 DOM.bip44change = $("#bip44 .change");
14642 DOM.strength = $(".strength");
14643 DOM.addresses = $(".addresses");
14644 DOM.rowsToAdd = $(".rows-to-add");
14645 DOM.more = $(".more");
14646 DOM.feedback = $(".feedback");
14647 DOM.tab = $(".derivation-type a");
14648 DOM.indexToggle = $(".index-toggle");
14649 DOM.addressToggle = $(".address-toggle");
14650 DOM.privateKeyToggle = $(".private-key-toggle");
14651
14652 function init() {
14653 // Events
14654 DOM.network.on("change", networkChanged);
14655 DOM.phrase.on("input", delayedPhraseChanged);
14656 DOM.passphrase.on("input", delayedPhraseChanged);
14657 DOM.generate.on("click", generateClicked);
14658 DOM.more.on("click", showMore);
14659 DOM.bip32path.on("input", delayedPhraseChanged);
14660 DOM.bip44purpose.on("input", delayedPhraseChanged);
14661 DOM.bip44coin.on("input", delayedPhraseChanged);
14662 DOM.bip44account.on("input", delayedPhraseChanged);
14663 DOM.bip44change.on("input", delayedPhraseChanged);
14664 DOM.tab.on("click", delayedPhraseChanged);
14665 DOM.indexToggle.on("click", toggleIndexes);
14666 DOM.addressToggle.on("click", toggleAddresses);
14667 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14668 disableForms();
14669 hidePending();
14670 hideValidationError();
14671 populateNetworkSelect();
14672 }
14673
14674 // Event handlers
14675
14676 function networkChanged(e) {
14677 var network = e.target.value;
14678 networks[network].onSelect();
14679 delayedPhraseChanged();
14680 }
14681
14682 function delayedPhraseChanged() {
14683 hideValidationError();
14684 showPending();
14685 if (phraseChangeTimeoutEvent != null) {
14686 clearTimeout(phraseChangeTimeoutEvent);
14687 }
14688 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14689 }
14690
14691 function phraseChanged() {
14692 showPending();
14693 hideValidationError();
14694 // Get the mnemonic phrase
14695 var phrase = DOM.phrase.val();
14696 var passphrase = DOM.passphrase.val();
14697 var errorText = findPhraseErrors(phrase);
14698 if (errorText) {
14699 showValidationError(errorText);
14700 return;
14701 }
14702 // Get the derivation path
14703 var derivationPath = getDerivationPath();
14704 var errorText = findDerivationPathErrors(derivationPath);
14705 if (errorText) {
14706 showValidationError(errorText);
14707 return;
14708 }
14709 // Calculate and display
14710 calcBip32Seed(phrase, passphrase, derivationPath);
14711 displayBip32Info();
14712 hidePending();
14713 }
14714
14715 function generateClicked() {
14716 clearDisplay();
14717 showPending();
14718 setTimeout(function() {
14719 var phrase = generateRandomPhrase();
14720 if (!phrase) {
14721 return;
14722 }
14723 phraseChanged();
14724 }, 50);
14725 }
14726
14727 function toggleIndexes() {
14728 showIndex = !showIndex;
14729 $("td.index span").toggleClass("invisible");
14730 }
14731
14732 function toggleAddresses() {
14733 showAddress = !showAddress;
14734 $("td.address span").toggleClass("invisible");
14735 }
14736
14737 function togglePrivateKeys() {
14738 showPrivKey = !showPrivKey;
14739 $("td.privkey span").toggleClass("invisible");
14740 }
14741
14742 // Private methods
14743
14744 function generateRandomPhrase() {
14745 if (!hasStrongRandom()) {
14746 var errorText = "This browser does not support strong randomness";
14747 showValidationError(errorText);
14748 return;
14749 }
14750 var numWords = parseInt(DOM.strength.val());
14751 var strength = numWords / 3 * 32;
14752 var words = mnemonic.generate(strength);
14753 DOM.phrase.val(words);
14754 return words;
14755 }
14756
14757 function calcBip32Seed(phrase, passphrase, path) {
14758 seed = mnemonic.toSeed(phrase, passphrase);
14759 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14760 bip32ExtendedKey = bip32RootKey;
14761 // Derive the key from the path
14762 var pathBits = path.split("/");
14763 for (var i=0; i<pathBits.length; i++) {
14764 var bit = pathBits[i];
14765 var index = parseInt(bit);
14766 if (isNaN(index)) {
14767 continue;
14768 }
14769 var hardened = bit[bit.length-1] == "'";
14770 if (hardened) {
14771 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14772 }
14773 else {
14774 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14775 }
14776 }
14777 }
14778
14779 function showValidationError(errorText) {
14780 DOM.feedback
14781 .text(errorText)
14782 .show();
14783 }
14784
14785 function hideValidationError() {
14786 DOM.feedback
14787 .text("")
14788 .hide();
14789 }
14790
14791 function findPhraseErrors(phrase) {
14792 // TODO make this right
14793 // Preprocess the words
14794 phrase = mnemonic.normalizeString(phrase);
14795 var parts = phrase.split(" ");
14796 var proper = [];
14797 for (var i=0; i<parts.length; i++) {
14798 var part = parts[i];
14799 if (part.length > 0) {
14800 // TODO check that lowercasing is always valid to do
14801 proper.push(part.toLowerCase());
14802 }
14803 }
14804 // TODO some levenstein on the words
14805 var properPhrase = proper.join(' ');
14806 // Check the words are valid
14807 var isValid = mnemonic.check(properPhrase);
14808 if (!isValid) {
14809 return "Invalid mnemonic";
14810 }
14811 return false;
14812 }
14813
14814 function getDerivationPath() {
14815 if (DOM.bip44tab.hasClass("active")) {
14816 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14817 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14818 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14819 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14820 var path = "m/";
14821 path += purpose + "'/";
14822 path += coin + "'/";
14823 path += account + "'/";
14824 path += change;
14825 DOM.bip44path.val(path);
14826 var derivationPath = DOM.bip44path.val();
14827 console.log("Using derivation path from BIP44 tab: " + derivationPath);
14828 return derivationPath;
14829 }
14830 else if (DOM.bip32tab.hasClass("active")) {
14831 var derivationPath = DOM.bip32path.val();
14832 console.log("Using derivation path from BIP32 tab: " + derivationPath);
14833 return derivationPath;
14834 }
14835 else {
14836 console.log("Unknown derivation path");
14837 }
14838 }
14839
14840 function findDerivationPathErrors(path) {
14841 // TODO
14842 return false;
14843 }
14844
14845 function displayBip32Info() {
14846 // Display the key
14847 DOM.seed.val(seed);
14848 var rootKey = bip32RootKey.toBase58();
14849 DOM.rootKey.val(rootKey);
14850 var extendedPrivKey = bip32ExtendedKey.toBase58();
14851 DOM.extendedPrivKey.val(extendedPrivKey);
14852 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14853 DOM.extendedPubKey.val(extendedPubKey);
14854 // Display the addresses and privkeys
14855 clearAddressesList();
14856 displayAddresses(0, 20);
14857 }
14858
14859 function displayAddresses(start, total) {
14860 for (var i=0; i<total; i++) {
14861 var index = i + start;
14862 new TableRow(index);
14863 }
14864 }
14865
14866 function TableRow(index) {
14867
14868 function init() {
14869 calculateValues();
14870 }
14871
14872 function calculateValues() {
14873 setTimeout(function() {
14874 var key = bip32ExtendedKey.derive(index);
14875 var address = key.getAddress().toString();
14876 var privkey = key.privKey.toWIF(network);
14877 var indexText = getDerivationPath() + "/" + index;
14878 addAddressToList(indexText, address, privkey);
14879 }, 50)
14880 }
14881
14882 init();
14883
14884 }
14885
14886 function showMore() {
14887 var start = DOM.addresses.children().length;
14888 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14889 if (isNaN(rowsToAdd)) {
14890 rowsToAdd = 20;
14891 DOM.rowsToAdd.val("20");
14892 }
14893 if (rowsToAdd > 200) {
14894 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14895 msg += "Do you want to continue?";
14896 if (!confirm(msg)) {
14897 return;
14898 }
14899 }
14900 displayAddresses(start, rowsToAdd);
14901 }
14902
14903 function clearDisplay() {
14904 clearAddressesList();
14905 clearKey();
14906 hideValidationError();
14907 }
14908
14909 function clearAddressesList() {
14910 DOM.addresses.empty();
14911 }
14912
14913 function clearKey() {
14914 DOM.rootKey.val("");
14915 DOM.extendedPrivKey.val("");
14916 DOM.extendedPubKey.val("");
14917 }
14918
14919 function addAddressToList(indexText, address, privkey) {
14920 var row = $(addressRowTemplate.html());
14921 // Elements
14922 var indexCell = row.find(".index span");
14923 var addressCell = row.find(".address span");
14924 var privkeyCell = row.find(".privkey span");
14925 // Content
14926 indexCell.text(indexText);
14927 addressCell.text(address);
14928 privkeyCell.text(privkey);
14929 // Visibility
14930 if (!showIndex) {
14931 indexCell.addClass("invisible");
14932 }
14933 if (!showAddress) {
14934 addressCell.addClass("invisible");
14935 }
14936 if (!showPrivKey) {
14937 privkeyCell.addClass("invisible");
14938 }
14939 DOM.addresses.append(row);
14940 }
14941
14942 function hasStrongRandom() {
14943 return 'crypto' in window && window['crypto'] !== null;
14944 }
14945
14946 function disableForms() {
14947 $("form").on("submit", function(e) {
14948 e.preventDefault();
14949 });
14950 }
14951
14952 function parseIntNoNaN(val, defaultVal) {
14953 var v = parseInt(val);
14954 if (isNaN(v)) {
14955 return defaultVal;
14956 }
14957 return v;
14958 }
14959
14960 function showPending() {
14961 DOM.feedback
14962 .text("Calculating...")
14963 .show();
14964 }
14965
14966 function hidePending() {
14967 DOM.feedback
14968 .text("")
14969 .hide();
14970 }
14971
14972 function populateNetworkSelect() {
14973 for (var i=0; i<networks.length; i++) {
14974 var network = networks[i];
14975 var option = $("<option>");
14976 option.attr("value", i);
14977 option.text(network.name);
14978 DOM.phraseNetwork.append(option);
14979 }
14980 }
14981
14982 var networks = [
14983 {
14984 name: "Bitcoin",
14985 onSelect: function() {
14986 network = bitcoin.networks.bitcoin;
14987 DOM.bip44coin.val(0);
14988 },
14989 },
14990 {
14991 name: "Bitcoin Testnet",
14992 onSelect: function() {
14993 network = bitcoin.networks.testnet;
14994 DOM.bip44coin.val(1);
14995 },
14996 },
14997 {
14998 name: "Litecoin",
14999 onSelect: function() {
15000 network = bitcoin.networks.litecoin;
15001 DOM.bip44coin.val(2);
15002 },
15003 },
15004 {
15005 name: "Dogecoin",
15006 onSelect: function() {
15007 network = bitcoin.networks.dogecoin;
15008 DOM.bip44coin.val(3);
15009 },
15010 },
15011 {
15012 name: "ShadowCash",
15013 onSelect: function() {
15014 network = bitcoin.networks.shadow;
15015 DOM.bip44coin.val(35);
15016 },
15017 },
15018 {
15019 name: "ShadowCash Testnet",
15020 onSelect: function() {
15021 network = bitcoin.networks.shadowtn;
15022 DOM.bip44coin.val(1);
15023 },
15024 },
15025 {
15026 name: "Viacoin",
15027 onSelect: function() {
15028 network = bitcoin.networks.viacoin;
15029 DOM.bip44coin.val(14);
15030 },
15031 },
15032 {
15033 name: "Viacoin Testnet",
15034 onSelect: function() {
15035 network = bitcoin.networks.viacointestnet;
15036 DOM.bip44coin.val(1);
15037 },
15038 },
15039 {
15040 name: "Jumbucks",
15041 onSelect: function() {
15042 network = bitcoin.networks.jumbucks;
15043 DOM.bip44coin.val(26);
15044 },
15045 },
15046 {
15047 name: "CLAM",
15048 onSelect: function() {
15049 network = bitcoin.networks.clam;
15050 DOM.bip44coin.val(23);
15051 },
15052 },
15053 ]
15054
15055 init();
15056
15057 })();
15058 </script>
15059 </body>
15060 </html>