]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
compile.py generates bip39-standalone.html
[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 </style>
43 </head>
44 <body>
45 <div class="container">
46
47 <h1 class="text-center">Mnemonic Code Converter</h1>
48 <hr>
49 <div class="row">
50 <div class="col-md-12">
51 <h2>Mnemonic</h2>
52 <form class="form-horizontal" role="form">
53 <div class="col-sm-2"></div>
54 <div class="col-sm-10">
55 <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>
56 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
57 </div>
58 <div class="form-group">
59 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
60 <div class="col-sm-10">
61 <textarea id="phrase" class="phrase form-control"></textarea>
62 </div>
63 </div>
64 <div class="form-group">
65 <label for="strength" class="col-sm-2 control-label">Number of words</label>
66 <div class="col-sm-10">
67 <div class="input-group">
68 <input type="number" class="strength form-control" id="strength" value="12">
69 <span class="input-group-btn">
70 <button class="btn generate">Generate Random Mnemonic</button>
71 </span>
72 </div>
73 </div>
74 </div>
75 <div class="form-group">
76 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
77 <div class="col-sm-10">
78 <textarea id="passphrase" class="passphrase form-control"></textarea>
79 </div>
80 </div>
81 <div class="form-group">
82 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
83 <div class="col-sm-10">
84 <select id="network-phrase" class="network form-control">
85 <!-- populated by javascript -->
86 </select>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
91 <div class="col-sm-10">
92 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
93 </div>
94 </div>
95 </form>
96 </div>
97 </div>
98
99 <hr>
100
101 <div class="row">
102 <div class="col-md-12">
103 <h2>Derivation Path</h2>
104 <ul class="derivation-type nav nav-tabs" role="tablist">
105 <li id="hive-tab" class="active">
106 <a href="#hive" role="tab" data-toggle="tab">Hive Wallet</a>
107 </li>
108 <li id="mycelium-tab">
109 <a href="#mycelium" role="tab" data-toggle="tab">Mycelium Wallet</a>
110 </li>
111 <li id="bip44-tab">
112 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
113 </li>
114 <li id="bip32-tab">
115 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
116 </li>
117 </ul>
118 <div class="derivation-type tab-content">
119 <div id="hive" class="tab-pane active">
120 <form class="form-horizontal" role="form">
121 <br>
122 <div class="col-sm-2"></div>
123 <div class="col-sm-10">
124 <p>For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a></p>
125 </div>
126 <div class="form-group">
127 <label for="hive-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
128 <div class="col-sm-10">
129 <input id="hive-path" type="text" class="path form-control" value="m/0'/0" readonly="readonly">
130 </div>
131 </div>
132 </form>
133 </div>
134 <div id="mycelium" class="tab-pane">
135 <form class="form-horizontal" role="form">
136 <br>
137 <div class="col-sm-2"></div>
138 <div class="col-sm-10">
139 <p>For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a></p>
140 </div>
141 <div class="form-group">
142 <label for="mycelium-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
143 <div class="col-sm-10">
144 <input id="mycelium-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
145 </div>
146 </div>
147 </form>
148 </div>
149 <div id="bip44" class="tab-pane">
150 <form class="form-horizontal" role="form">
151 <br>
152 <div class="col-sm-2"></div>
153 <div class="col-sm-10">
154 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
155 </div>
156 <div class="form-group">
157 <label for="purpose" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="purpose" type="text" class="purpose form-control" value="44">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="coin" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="coin" type="text" class="coin form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="account" class="col-sm-2 control-label">
174 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
175 </label>
176 <div class="col-sm-10">
177 <input id="account" type="text" class="account form-control" value="0">
178 </div>
179 </div>
180 <div class="form-group">
181 <label for="change" class="col-sm-2 control-label">
182 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
183 </label>
184 <div class="col-sm-10">
185 <input id="change" type="text" class="change form-control" value="0">
186 </div>
187 </div>
188 <div class="form-group">
189 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
190 <div class="col-sm-10">
191 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
192 </div>
193 </div>
194 </form>
195 </div>
196 <div id="bip32" class="tab-pane">
197 <form class="form-horizontal" role="form">
198 <br>
199 <div class="col-sm-2"></div>
200 <div class="col-sm-10">
201 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
202 </div>
203 <div class="form-group">
204 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
205 <div class="col-sm-10">
206 <input id="bip32-path" type="text" class="path form-control" value="m/0">
207 </div>
208 </div>
209 </form>
210 </div>
211 </div>
212 <form class="form-horizontal" role="form">
213 <div class="form-group">
214 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
215 <div class="col-sm-10">
216 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
217 </div>
218 </div>
219 <div class="form-group">
220 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
221 <div class="col-sm-10">
222 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
223 </div>
224 </div>
225 </form>
226 </div>
227 </div>
228
229 <hr>
230
231 <div class="row">
232 <div class="col-md-12">
233 <h2>Derived Addresses</h2>
234 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
235 <table class="table table-striped">
236 <thead>
237 <th>
238 <div class="input-group">
239 Index&nbsp;&nbsp;
240 <button class="index-toggle">Toggle</button>
241 </div>
242 </th>
243 <th>
244 <div class="input-group">
245 Address&nbsp;&nbsp;
246 <button class="address-toggle">Toggle</button>
247 </div>
248 </th>
249 <th>
250 <div class="input-group">
251 Private Key&nbsp;&nbsp;
252 <button class="private-key-toggle">Toggle</button>
253 </div>
254 </th>
255 </thead>
256 <tbody class="addresses">
257 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
258 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
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 </tbody>
263 </table>
264 </div>
265 </div>
266 <span>Show next </button>
267 <input type="number" class="rows-to-add" value="20">
268 <button class="more">Show</button>
269
270 <hr>
271
272 <div class="row">
273 <div class="col-md-12">
274 <h2>More info</h2>
275 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
276 <p>
277 Read more at the
278 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
279 </p>
280 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
281 <p>
282 Read more at the
283 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
284 and see the demo at
285 <a href="http://bip32.org/" target="_blank">bip32.org</a>
286 </p>
287 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
288 <p>
289 Read more at the
290 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
291 </p>
292 <h3>Private Keys</h3>
293 <p>
294 Use private keys at
295 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
296 but be careful - it can be easy to make mistakes if you
297 don't know what you're doing
298 </p>
299 </div>
300 </div>
301
302 <hr>
303
304 <div class="row">
305 <div class="col-md-12">
306
307 <h2>Offline Usage</h2>
308
309 <p>
310 You can use this tool without having to be online.
311 </p>
312 <p>
313 In your browser, select file save-as, and save this page
314 as a file.
315 </p>
316 <p>
317 Double-click that file to open it in a browser
318 on any offline computer.
319 </p>
320 <p>
321 Alternatively, download it from
322 <a href="https://github.com/dcpos/bip39">
323 https://github.com/dcpos/bip39
324 </a>
325
326 </div>
327 </div>
328
329 <hr>
330
331 <div class="row">
332 <div class="col-md-12">
333
334 <h2>This project is 100% open-source code</h2>
335
336 <p>
337 <span>Get the source code at - </span>
338 <a href="https://github.com/dcpos/bip39" target="_blank">
339 https://github.com/dcpos/bip39
340 </a>
341 </p>
342
343 <h3>Libraries</h3>
344
345 <p>
346 <span>BitcoinJS - </span>
347 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
348 https://github.com/bitcoinjs/bitcoinjs-lib
349 </a>
350 </p>
351
352 <p>
353 <span>jsBIP39 - </span>
354 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
355 https://github.com/iancoleman/jsbip39
356 </a>
357 </p>
358
359 <p>
360 <span>sjcl - </span>
361 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
362 https://github.com/bitwiseshiftleft/sjcl
363 </a>
364 </p>
365
366 <p>
367 <span>jQuery - </span>
368 <a href="https://jquery.com/" target="_blank">
369 https://jquery.com/
370 </a>
371 </p>
372
373 <p>
374 <span>Twitter Bootstrap - </span>
375 <a href="http://getbootstrap.com/" target="_blank">
376 http://getbootstrap.com/
377 </a>
378 </p>
379
380 </div>
381 </div>
382
383 </div>
384
385 <div class="feedback-container">
386 <div class="feedback">Loading...</div>
387 </div>
388
389 <script type="text/template" id="address-row-template">
390 <tr>
391 <td class="index"><span></span></td>
392 <td class="address"><span></span></td>
393 <td class="privkey"><span></span></td>
394 </tr>
395 </script>
396 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
397 !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)
398 },_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))
399 },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});
400 </script>
401 <script>/*!
402 * Bootstrap v3.2.0 (http://getbootstrap.com)
403 * Copyright 2011-2014 Twitter, Inc.
404 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
405 */
406 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>
407 <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){
408 // (public) Constructor
409 function BigInteger(a, b, c) {
410 if (!(this instanceof BigInteger))
411 return new BigInteger(a, b, c)
412
413 if (a != null) {
414 if ("number" == typeof a) this.fromNumber(a, b, c)
415 else if (b == null && "string" != typeof a) this.fromString(a, 256)
416 else this.fromString(a, b)
417 }
418 }
419
420 var proto = BigInteger.prototype
421
422 // duck-typed isBigInteger
423 proto.__bigi = require('../package.json').version
424 BigInteger.isBigInteger = function (obj, check_ver) {
425 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
426 }
427
428 // Bits per digit
429 var dbits
430
431 // am: Compute w_j += (x*this_i), propagate carries,
432 // c is initial carry, returns final carry.
433 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
434 // We need to select the fastest one that works in this environment.
435
436 // am1: use a single mult and divide to get the high bits,
437 // max digit bits should be 26 because
438 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
439 function am1(i, x, w, j, c, n) {
440 while (--n >= 0) {
441 var v = x * this[i++] + w[j] + c
442 c = Math.floor(v / 0x4000000)
443 w[j++] = v & 0x3ffffff
444 }
445 return c
446 }
447 // am2 avoids a big mult-and-extract completely.
448 // Max digit bits should be <= 30 because we do bitwise ops
449 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
450 function am2(i, x, w, j, c, n) {
451 var xl = x & 0x7fff,
452 xh = x >> 15
453 while (--n >= 0) {
454 var l = this[i] & 0x7fff
455 var h = this[i++] >> 15
456 var m = xh * l + h * xl
457 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
458 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
459 w[j++] = l & 0x3fffffff
460 }
461 return c
462 }
463 // Alternately, set max digit bits to 28 since some
464 // browsers slow down when dealing with 32-bit numbers.
465 function am3(i, x, w, j, c, n) {
466 var xl = x & 0x3fff,
467 xh = x >> 14
468 while (--n >= 0) {
469 var l = this[i] & 0x3fff
470 var h = this[i++] >> 14
471 var m = xh * l + h * xl
472 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
473 c = (l >> 28) + (m >> 14) + xh * h
474 w[j++] = l & 0xfffffff
475 }
476 return c
477 }
478
479 // wtf?
480 BigInteger.prototype.am = am1
481 dbits = 26
482
483 BigInteger.prototype.DB = dbits
484 BigInteger.prototype.DM = ((1 << dbits) - 1)
485 var DV = BigInteger.prototype.DV = (1 << dbits)
486
487 var BI_FP = 52
488 BigInteger.prototype.FV = Math.pow(2, BI_FP)
489 BigInteger.prototype.F1 = BI_FP - dbits
490 BigInteger.prototype.F2 = 2 * dbits - BI_FP
491
492 // Digit conversions
493 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
494 var BI_RC = new Array()
495 var rr, vv
496 rr = "0".charCodeAt(0)
497 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
498 rr = "a".charCodeAt(0)
499 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
500 rr = "A".charCodeAt(0)
501 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
502
503 function int2char(n) {
504 return BI_RM.charAt(n)
505 }
506
507 function intAt(s, i) {
508 var c = BI_RC[s.charCodeAt(i)]
509 return (c == null) ? -1 : c
510 }
511
512 // (protected) copy this to r
513 function bnpCopyTo(r) {
514 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
515 r.t = this.t
516 r.s = this.s
517 }
518
519 // (protected) set from integer value x, -DV <= x < DV
520 function bnpFromInt(x) {
521 this.t = 1
522 this.s = (x < 0) ? -1 : 0
523 if (x > 0) this[0] = x
524 else if (x < -1) this[0] = x + DV
525 else this.t = 0
526 }
527
528 // return bigint initialized to value
529 function nbv(i) {
530 var r = new BigInteger()
531 r.fromInt(i)
532 return r
533 }
534
535 // (protected) set from string and radix
536 function bnpFromString(s, b) {
537 var self = this
538
539 var k
540 if (b == 16) k = 4
541 else if (b == 8) k = 3
542 else if (b == 256) k = 8; // byte array
543 else if (b == 2) k = 1
544 else if (b == 32) k = 5
545 else if (b == 4) k = 2
546 else {
547 self.fromRadix(s, b)
548 return
549 }
550 self.t = 0
551 self.s = 0
552 var i = s.length,
553 mi = false,
554 sh = 0
555 while (--i >= 0) {
556 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
557 if (x < 0) {
558 if (s.charAt(i) == "-") mi = true
559 continue
560 }
561 mi = false
562 if (sh == 0)
563 self[self.t++] = x
564 else if (sh + k > self.DB) {
565 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
566 self[self.t++] = (x >> (self.DB - sh))
567 } else
568 self[self.t - 1] |= x << sh
569 sh += k
570 if (sh >= self.DB) sh -= self.DB
571 }
572 if (k == 8 && (s[0] & 0x80) != 0) {
573 self.s = -1
574 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
575 }
576 self.clamp()
577 if (mi) BigInteger.ZERO.subTo(self, self)
578 }
579
580 // (protected) clamp off excess high words
581 function bnpClamp() {
582 var c = this.s & this.DM
583 while (this.t > 0 && this[this.t - 1] == c)--this.t
584 }
585
586 // (public) return string representation in given radix
587 function bnToString(b) {
588 var self = this
589 if (self.s < 0) return "-" + self.negate()
590 .toString(b)
591 var k
592 if (b == 16) k = 4
593 else if (b == 8) k = 3
594 else if (b == 2) k = 1
595 else if (b == 32) k = 5
596 else if (b == 4) k = 2
597 else return self.toRadix(b)
598 var km = (1 << k) - 1,
599 d, m = false,
600 r = "",
601 i = self.t
602 var p = self.DB - (i * self.DB) % k
603 if (i-- > 0) {
604 if (p < self.DB && (d = self[i] >> p) > 0) {
605 m = true
606 r = int2char(d)
607 }
608 while (i >= 0) {
609 if (p < k) {
610 d = (self[i] & ((1 << p) - 1)) << (k - p)
611 d |= self[--i] >> (p += self.DB - k)
612 } else {
613 d = (self[i] >> (p -= k)) & km
614 if (p <= 0) {
615 p += self.DB
616 --i
617 }
618 }
619 if (d > 0) m = true
620 if (m) r += int2char(d)
621 }
622 }
623 return m ? r : "0"
624 }
625
626 // (public) -this
627 function bnNegate() {
628 var r = new BigInteger()
629 BigInteger.ZERO.subTo(this, r)
630 return r
631 }
632
633 // (public) |this|
634 function bnAbs() {
635 return (this.s < 0) ? this.negate() : this
636 }
637
638 // (public) return + if this > a, - if this < a, 0 if equal
639 function bnCompareTo(a) {
640 var r = this.s - a.s
641 if (r != 0) return r
642 var i = this.t
643 r = i - a.t
644 if (r != 0) return (this.s < 0) ? -r : r
645 while (--i >= 0)
646 if ((r = this[i] - a[i]) != 0) return r
647 return 0
648 }
649
650 // returns bit length of the integer x
651 function nbits(x) {
652 var r = 1,
653 t
654 if ((t = x >>> 16) != 0) {
655 x = t
656 r += 16
657 }
658 if ((t = x >> 8) != 0) {
659 x = t
660 r += 8
661 }
662 if ((t = x >> 4) != 0) {
663 x = t
664 r += 4
665 }
666 if ((t = x >> 2) != 0) {
667 x = t
668 r += 2
669 }
670 if ((t = x >> 1) != 0) {
671 x = t
672 r += 1
673 }
674 return r
675 }
676
677 // (public) return the number of bits in "this"
678 function bnBitLength() {
679 if (this.t <= 0) return 0
680 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
681 }
682
683 // (public) return the number of bytes in "this"
684 function bnByteLength() {
685 return this.bitLength() >> 3
686 }
687
688 // (protected) r = this << n*DB
689 function bnpDLShiftTo(n, r) {
690 var i
691 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
692 for (i = n - 1; i >= 0; --i) r[i] = 0
693 r.t = this.t + n
694 r.s = this.s
695 }
696
697 // (protected) r = this >> n*DB
698 function bnpDRShiftTo(n, r) {
699 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
700 r.t = Math.max(this.t - n, 0)
701 r.s = this.s
702 }
703
704 // (protected) r = this << n
705 function bnpLShiftTo(n, r) {
706 var self = this
707 var bs = n % self.DB
708 var cbs = self.DB - bs
709 var bm = (1 << cbs) - 1
710 var ds = Math.floor(n / self.DB),
711 c = (self.s << bs) & self.DM,
712 i
713 for (i = self.t - 1; i >= 0; --i) {
714 r[i + ds + 1] = (self[i] >> cbs) | c
715 c = (self[i] & bm) << bs
716 }
717 for (i = ds - 1; i >= 0; --i) r[i] = 0
718 r[ds] = c
719 r.t = self.t + ds + 1
720 r.s = self.s
721 r.clamp()
722 }
723
724 // (protected) r = this >> n
725 function bnpRShiftTo(n, r) {
726 var self = this
727 r.s = self.s
728 var ds = Math.floor(n / self.DB)
729 if (ds >= self.t) {
730 r.t = 0
731 return
732 }
733 var bs = n % self.DB
734 var cbs = self.DB - bs
735 var bm = (1 << bs) - 1
736 r[0] = self[ds] >> bs
737 for (var i = ds + 1; i < self.t; ++i) {
738 r[i - ds - 1] |= (self[i] & bm) << cbs
739 r[i - ds] = self[i] >> bs
740 }
741 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
742 r.t = self.t - ds
743 r.clamp()
744 }
745
746 // (protected) r = this - a
747 function bnpSubTo(a, r) {
748 var self = this
749 var i = 0,
750 c = 0,
751 m = Math.min(a.t, self.t)
752 while (i < m) {
753 c += self[i] - a[i]
754 r[i++] = c & self.DM
755 c >>= self.DB
756 }
757 if (a.t < self.t) {
758 c -= a.s
759 while (i < self.t) {
760 c += self[i]
761 r[i++] = c & self.DM
762 c >>= self.DB
763 }
764 c += self.s
765 } else {
766 c += self.s
767 while (i < a.t) {
768 c -= a[i]
769 r[i++] = c & self.DM
770 c >>= self.DB
771 }
772 c -= a.s
773 }
774 r.s = (c < 0) ? -1 : 0
775 if (c < -1) r[i++] = self.DV + c
776 else if (c > 0) r[i++] = c
777 r.t = i
778 r.clamp()
779 }
780
781 // (protected) r = this * a, r != this,a (HAC 14.12)
782 // "this" should be the larger one if appropriate.
783 function bnpMultiplyTo(a, r) {
784 var x = this.abs(),
785 y = a.abs()
786 var i = x.t
787 r.t = i + y.t
788 while (--i >= 0) r[i] = 0
789 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
790 r.s = 0
791 r.clamp()
792 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
793 }
794
795 // (protected) r = this^2, r != this (HAC 14.16)
796 function bnpSquareTo(r) {
797 var x = this.abs()
798 var i = r.t = 2 * x.t
799 while (--i >= 0) r[i] = 0
800 for (i = 0; i < x.t - 1; ++i) {
801 var c = x.am(i, x[i], r, 2 * i, 0, 1)
802 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
803 r[i + x.t] -= x.DV
804 r[i + x.t + 1] = 1
805 }
806 }
807 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
808 r.s = 0
809 r.clamp()
810 }
811
812 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
813 // r != q, this != m. q or r may be null.
814 function bnpDivRemTo(m, q, r) {
815 var self = this
816 var pm = m.abs()
817 if (pm.t <= 0) return
818 var pt = self.abs()
819 if (pt.t < pm.t) {
820 if (q != null) q.fromInt(0)
821 if (r != null) self.copyTo(r)
822 return
823 }
824 if (r == null) r = new BigInteger()
825 var y = new BigInteger(),
826 ts = self.s,
827 ms = m.s
828 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
829 if (nsh > 0) {
830 pm.lShiftTo(nsh, y)
831 pt.lShiftTo(nsh, r)
832 } else {
833 pm.copyTo(y)
834 pt.copyTo(r)
835 }
836 var ys = y.t
837 var y0 = y[ys - 1]
838 if (y0 == 0) return
839 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
840 var d1 = self.FV / yt,
841 d2 = (1 << self.F1) / yt,
842 e = 1 << self.F2
843 var i = r.t,
844 j = i - ys,
845 t = (q == null) ? new BigInteger() : q
846 y.dlShiftTo(j, t)
847 if (r.compareTo(t) >= 0) {
848 r[r.t++] = 1
849 r.subTo(t, r)
850 }
851 BigInteger.ONE.dlShiftTo(ys, t)
852 t.subTo(y, y); // "negative" y so we can replace sub with am later
853 while (y.t < ys) y[y.t++] = 0
854 while (--j >= 0) {
855 // Estimate quotient digit
856 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
857 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
858 y.dlShiftTo(j, t)
859 r.subTo(t, r)
860 while (r[i] < --qd) r.subTo(t, r)
861 }
862 }
863 if (q != null) {
864 r.drShiftTo(ys, q)
865 if (ts != ms) BigInteger.ZERO.subTo(q, q)
866 }
867 r.t = ys
868 r.clamp()
869 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
870 if (ts < 0) BigInteger.ZERO.subTo(r, r)
871 }
872
873 // (public) this mod a
874 function bnMod(a) {
875 var r = new BigInteger()
876 this.abs()
877 .divRemTo(a, null, r)
878 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
879 return r
880 }
881
882 // Modular reduction using "classic" algorithm
883 function Classic(m) {
884 this.m = m
885 }
886
887 function cConvert(x) {
888 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
889 else return x
890 }
891
892 function cRevert(x) {
893 return x
894 }
895
896 function cReduce(x) {
897 x.divRemTo(this.m, null, x)
898 }
899
900 function cMulTo(x, y, r) {
901 x.multiplyTo(y, r)
902 this.reduce(r)
903 }
904
905 function cSqrTo(x, r) {
906 x.squareTo(r)
907 this.reduce(r)
908 }
909
910 Classic.prototype.convert = cConvert
911 Classic.prototype.revert = cRevert
912 Classic.prototype.reduce = cReduce
913 Classic.prototype.mulTo = cMulTo
914 Classic.prototype.sqrTo = cSqrTo
915
916 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
917 // justification:
918 // xy == 1 (mod m)
919 // xy = 1+km
920 // xy(2-xy) = (1+km)(1-km)
921 // x[y(2-xy)] = 1-k^2m^2
922 // x[y(2-xy)] == 1 (mod m^2)
923 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
924 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
925 // JS multiply "overflows" differently from C/C++, so care is needed here.
926 function bnpInvDigit() {
927 if (this.t < 1) return 0
928 var x = this[0]
929 if ((x & 1) == 0) return 0
930 var y = x & 3; // y == 1/x mod 2^2
931 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
932 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
933 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
934 // last step - calculate inverse mod DV directly
935 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
936 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
937 // we really want the negative inverse, and -DV < y < DV
938 return (y > 0) ? this.DV - y : -y
939 }
940
941 // Montgomery reduction
942 function Montgomery(m) {
943 this.m = m
944 this.mp = m.invDigit()
945 this.mpl = this.mp & 0x7fff
946 this.mph = this.mp >> 15
947 this.um = (1 << (m.DB - 15)) - 1
948 this.mt2 = 2 * m.t
949 }
950
951 // xR mod m
952 function montConvert(x) {
953 var r = new BigInteger()
954 x.abs()
955 .dlShiftTo(this.m.t, r)
956 r.divRemTo(this.m, null, r)
957 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
958 return r
959 }
960
961 // x/R mod m
962 function montRevert(x) {
963 var r = new BigInteger()
964 x.copyTo(r)
965 this.reduce(r)
966 return r
967 }
968
969 // x = x/R mod m (HAC 14.32)
970 function montReduce(x) {
971 while (x.t <= this.mt2) // pad x so am has enough room later
972 x[x.t++] = 0
973 for (var i = 0; i < this.m.t; ++i) {
974 // faster way of calculating u0 = x[i]*mp mod DV
975 var j = x[i] & 0x7fff
976 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
977 // use am to combine the multiply-shift-add into one call
978 j = i + this.m.t
979 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
980 // propagate carry
981 while (x[j] >= x.DV) {
982 x[j] -= x.DV
983 x[++j]++
984 }
985 }
986 x.clamp()
987 x.drShiftTo(this.m.t, x)
988 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
989 }
990
991 // r = "x^2/R mod m"; x != r
992 function montSqrTo(x, r) {
993 x.squareTo(r)
994 this.reduce(r)
995 }
996
997 // r = "xy/R mod m"; x,y != r
998 function montMulTo(x, y, r) {
999 x.multiplyTo(y, r)
1000 this.reduce(r)
1001 }
1002
1003 Montgomery.prototype.convert = montConvert
1004 Montgomery.prototype.revert = montRevert
1005 Montgomery.prototype.reduce = montReduce
1006 Montgomery.prototype.mulTo = montMulTo
1007 Montgomery.prototype.sqrTo = montSqrTo
1008
1009 // (protected) true iff this is even
1010 function bnpIsEven() {
1011 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1012 }
1013
1014 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1015 function bnpExp(e, z) {
1016 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1017 var r = new BigInteger(),
1018 r2 = new BigInteger(),
1019 g = z.convert(this),
1020 i = nbits(e) - 1
1021 g.copyTo(r)
1022 while (--i >= 0) {
1023 z.sqrTo(r, r2)
1024 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1025 else {
1026 var t = r
1027 r = r2
1028 r2 = t
1029 }
1030 }
1031 return z.revert(r)
1032 }
1033
1034 // (public) this^e % m, 0 <= e < 2^32
1035 function bnModPowInt(e, m) {
1036 var z
1037 if (e < 256 || m.isEven()) z = new Classic(m)
1038 else z = new Montgomery(m)
1039 return this.exp(e, z)
1040 }
1041
1042 // protected
1043 proto.copyTo = bnpCopyTo
1044 proto.fromInt = bnpFromInt
1045 proto.fromString = bnpFromString
1046 proto.clamp = bnpClamp
1047 proto.dlShiftTo = bnpDLShiftTo
1048 proto.drShiftTo = bnpDRShiftTo
1049 proto.lShiftTo = bnpLShiftTo
1050 proto.rShiftTo = bnpRShiftTo
1051 proto.subTo = bnpSubTo
1052 proto.multiplyTo = bnpMultiplyTo
1053 proto.squareTo = bnpSquareTo
1054 proto.divRemTo = bnpDivRemTo
1055 proto.invDigit = bnpInvDigit
1056 proto.isEven = bnpIsEven
1057 proto.exp = bnpExp
1058
1059 // public
1060 proto.toString = bnToString
1061 proto.negate = bnNegate
1062 proto.abs = bnAbs
1063 proto.compareTo = bnCompareTo
1064 proto.bitLength = bnBitLength
1065 proto.byteLength = bnByteLength
1066 proto.mod = bnMod
1067 proto.modPowInt = bnModPowInt
1068
1069 // (public)
1070 function bnClone() {
1071 var r = new BigInteger()
1072 this.copyTo(r)
1073 return r
1074 }
1075
1076 // (public) return value as integer
1077 function bnIntValue() {
1078 if (this.s < 0) {
1079 if (this.t == 1) return this[0] - this.DV
1080 else if (this.t == 0) return -1
1081 } else if (this.t == 1) return this[0]
1082 else if (this.t == 0) return 0
1083 // assumes 16 < DB < 32
1084 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1085 }
1086
1087 // (public) return value as byte
1088 function bnByteValue() {
1089 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1090 }
1091
1092 // (public) return value as short (assumes DB>=16)
1093 function bnShortValue() {
1094 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1095 }
1096
1097 // (protected) return x s.t. r^x < DV
1098 function bnpChunkSize(r) {
1099 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1100 }
1101
1102 // (public) 0 if this == 0, 1 if this > 0
1103 function bnSigNum() {
1104 if (this.s < 0) return -1
1105 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1106 else return 1
1107 }
1108
1109 // (protected) convert to radix string
1110 function bnpToRadix(b) {
1111 if (b == null) b = 10
1112 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1113 var cs = this.chunkSize(b)
1114 var a = Math.pow(b, cs)
1115 var d = nbv(a),
1116 y = new BigInteger(),
1117 z = new BigInteger(),
1118 r = ""
1119 this.divRemTo(d, y, z)
1120 while (y.signum() > 0) {
1121 r = (a + z.intValue())
1122 .toString(b)
1123 .substr(1) + r
1124 y.divRemTo(d, y, z)
1125 }
1126 return z.intValue()
1127 .toString(b) + r
1128 }
1129
1130 // (protected) convert from radix string
1131 function bnpFromRadix(s, b) {
1132 var self = this
1133 self.fromInt(0)
1134 if (b == null) b = 10
1135 var cs = self.chunkSize(b)
1136 var d = Math.pow(b, cs),
1137 mi = false,
1138 j = 0,
1139 w = 0
1140 for (var i = 0; i < s.length; ++i) {
1141 var x = intAt(s, i)
1142 if (x < 0) {
1143 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1144 continue
1145 }
1146 w = b * w + x
1147 if (++j >= cs) {
1148 self.dMultiply(d)
1149 self.dAddOffset(w, 0)
1150 j = 0
1151 w = 0
1152 }
1153 }
1154 if (j > 0) {
1155 self.dMultiply(Math.pow(b, j))
1156 self.dAddOffset(w, 0)
1157 }
1158 if (mi) BigInteger.ZERO.subTo(self, self)
1159 }
1160
1161 // (protected) alternate constructor
1162 function bnpFromNumber(a, b, c) {
1163 var self = this
1164 if ("number" == typeof b) {
1165 // new BigInteger(int,int,RNG)
1166 if (a < 2) self.fromInt(1)
1167 else {
1168 self.fromNumber(a, c)
1169 if (!self.testBit(a - 1)) // force MSB set
1170 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1171 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1172 while (!self.isProbablePrime(b)) {
1173 self.dAddOffset(2, 0)
1174 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1175 }
1176 }
1177 } else {
1178 // new BigInteger(int,RNG)
1179 var x = new Array(),
1180 t = a & 7
1181 x.length = (a >> 3) + 1
1182 b.nextBytes(x)
1183 if (t > 0) x[0] &= ((1 << t) - 1)
1184 else x[0] = 0
1185 self.fromString(x, 256)
1186 }
1187 }
1188
1189 // (public) convert to bigendian byte array
1190 function bnToByteArray() {
1191 var self = this
1192 var i = self.t,
1193 r = new Array()
1194 r[0] = self.s
1195 var p = self.DB - (i * self.DB) % 8,
1196 d, k = 0
1197 if (i-- > 0) {
1198 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1199 r[k++] = d | (self.s << (self.DB - p))
1200 while (i >= 0) {
1201 if (p < 8) {
1202 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1203 d |= self[--i] >> (p += self.DB - 8)
1204 } else {
1205 d = (self[i] >> (p -= 8)) & 0xff
1206 if (p <= 0) {
1207 p += self.DB
1208 --i
1209 }
1210 }
1211 if ((d & 0x80) != 0) d |= -256
1212 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1213 if (k > 0 || d != self.s) r[k++] = d
1214 }
1215 }
1216 return r
1217 }
1218
1219 function bnEquals(a) {
1220 return (this.compareTo(a) == 0)
1221 }
1222
1223 function bnMin(a) {
1224 return (this.compareTo(a) < 0) ? this : a
1225 }
1226
1227 function bnMax(a) {
1228 return (this.compareTo(a) > 0) ? this : a
1229 }
1230
1231 // (protected) r = this op a (bitwise)
1232 function bnpBitwiseTo(a, op, r) {
1233 var self = this
1234 var i, f, m = Math.min(a.t, self.t)
1235 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1236 if (a.t < self.t) {
1237 f = a.s & self.DM
1238 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1239 r.t = self.t
1240 } else {
1241 f = self.s & self.DM
1242 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1243 r.t = a.t
1244 }
1245 r.s = op(self.s, a.s)
1246 r.clamp()
1247 }
1248
1249 // (public) this & a
1250 function op_and(x, y) {
1251 return x & y
1252 }
1253
1254 function bnAnd(a) {
1255 var r = new BigInteger()
1256 this.bitwiseTo(a, op_and, r)
1257 return r
1258 }
1259
1260 // (public) this | a
1261 function op_or(x, y) {
1262 return x | y
1263 }
1264
1265 function bnOr(a) {
1266 var r = new BigInteger()
1267 this.bitwiseTo(a, op_or, r)
1268 return r
1269 }
1270
1271 // (public) this ^ a
1272 function op_xor(x, y) {
1273 return x ^ y
1274 }
1275
1276 function bnXor(a) {
1277 var r = new BigInteger()
1278 this.bitwiseTo(a, op_xor, r)
1279 return r
1280 }
1281
1282 // (public) this & ~a
1283 function op_andnot(x, y) {
1284 return x & ~y
1285 }
1286
1287 function bnAndNot(a) {
1288 var r = new BigInteger()
1289 this.bitwiseTo(a, op_andnot, r)
1290 return r
1291 }
1292
1293 // (public) ~this
1294 function bnNot() {
1295 var r = new BigInteger()
1296 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1297 r.t = this.t
1298 r.s = ~this.s
1299 return r
1300 }
1301
1302 // (public) this << n
1303 function bnShiftLeft(n) {
1304 var r = new BigInteger()
1305 if (n < 0) this.rShiftTo(-n, r)
1306 else this.lShiftTo(n, r)
1307 return r
1308 }
1309
1310 // (public) this >> n
1311 function bnShiftRight(n) {
1312 var r = new BigInteger()
1313 if (n < 0) this.lShiftTo(-n, r)
1314 else this.rShiftTo(n, r)
1315 return r
1316 }
1317
1318 // return index of lowest 1-bit in x, x < 2^31
1319 function lbit(x) {
1320 if (x == 0) return -1
1321 var r = 0
1322 if ((x & 0xffff) == 0) {
1323 x >>= 16
1324 r += 16
1325 }
1326 if ((x & 0xff) == 0) {
1327 x >>= 8
1328 r += 8
1329 }
1330 if ((x & 0xf) == 0) {
1331 x >>= 4
1332 r += 4
1333 }
1334 if ((x & 3) == 0) {
1335 x >>= 2
1336 r += 2
1337 }
1338 if ((x & 1) == 0)++r
1339 return r
1340 }
1341
1342 // (public) returns index of lowest 1-bit (or -1 if none)
1343 function bnGetLowestSetBit() {
1344 for (var i = 0; i < this.t; ++i)
1345 if (this[i] != 0) return i * this.DB + lbit(this[i])
1346 if (this.s < 0) return this.t * this.DB
1347 return -1
1348 }
1349
1350 // return number of 1 bits in x
1351 function cbit(x) {
1352 var r = 0
1353 while (x != 0) {
1354 x &= x - 1
1355 ++r
1356 }
1357 return r
1358 }
1359
1360 // (public) return number of set bits
1361 function bnBitCount() {
1362 var r = 0,
1363 x = this.s & this.DM
1364 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1365 return r
1366 }
1367
1368 // (public) true iff nth bit is set
1369 function bnTestBit(n) {
1370 var j = Math.floor(n / this.DB)
1371 if (j >= this.t) return (this.s != 0)
1372 return ((this[j] & (1 << (n % this.DB))) != 0)
1373 }
1374
1375 // (protected) this op (1<<n)
1376 function bnpChangeBit(n, op) {
1377 var r = BigInteger.ONE.shiftLeft(n)
1378 this.bitwiseTo(r, op, r)
1379 return r
1380 }
1381
1382 // (public) this | (1<<n)
1383 function bnSetBit(n) {
1384 return this.changeBit(n, op_or)
1385 }
1386
1387 // (public) this & ~(1<<n)
1388 function bnClearBit(n) {
1389 return this.changeBit(n, op_andnot)
1390 }
1391
1392 // (public) this ^ (1<<n)
1393 function bnFlipBit(n) {
1394 return this.changeBit(n, op_xor)
1395 }
1396
1397 // (protected) r = this + a
1398 function bnpAddTo(a, r) {
1399 var self = this
1400
1401 var i = 0,
1402 c = 0,
1403 m = Math.min(a.t, self.t)
1404 while (i < m) {
1405 c += self[i] + a[i]
1406 r[i++] = c & self.DM
1407 c >>= self.DB
1408 }
1409 if (a.t < self.t) {
1410 c += a.s
1411 while (i < self.t) {
1412 c += self[i]
1413 r[i++] = c & self.DM
1414 c >>= self.DB
1415 }
1416 c += self.s
1417 } else {
1418 c += self.s
1419 while (i < a.t) {
1420 c += a[i]
1421 r[i++] = c & self.DM
1422 c >>= self.DB
1423 }
1424 c += a.s
1425 }
1426 r.s = (c < 0) ? -1 : 0
1427 if (c > 0) r[i++] = c
1428 else if (c < -1) r[i++] = self.DV + c
1429 r.t = i
1430 r.clamp()
1431 }
1432
1433 // (public) this + a
1434 function bnAdd(a) {
1435 var r = new BigInteger()
1436 this.addTo(a, r)
1437 return r
1438 }
1439
1440 // (public) this - a
1441 function bnSubtract(a) {
1442 var r = new BigInteger()
1443 this.subTo(a, r)
1444 return r
1445 }
1446
1447 // (public) this * a
1448 function bnMultiply(a) {
1449 var r = new BigInteger()
1450 this.multiplyTo(a, r)
1451 return r
1452 }
1453
1454 // (public) this^2
1455 function bnSquare() {
1456 var r = new BigInteger()
1457 this.squareTo(r)
1458 return r
1459 }
1460
1461 // (public) this / a
1462 function bnDivide(a) {
1463 var r = new BigInteger()
1464 this.divRemTo(a, r, null)
1465 return r
1466 }
1467
1468 // (public) this % a
1469 function bnRemainder(a) {
1470 var r = new BigInteger()
1471 this.divRemTo(a, null, r)
1472 return r
1473 }
1474
1475 // (public) [this/a,this%a]
1476 function bnDivideAndRemainder(a) {
1477 var q = new BigInteger(),
1478 r = new BigInteger()
1479 this.divRemTo(a, q, r)
1480 return new Array(q, r)
1481 }
1482
1483 // (protected) this *= n, this >= 0, 1 < n < DV
1484 function bnpDMultiply(n) {
1485 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1486 ++this.t
1487 this.clamp()
1488 }
1489
1490 // (protected) this += n << w words, this >= 0
1491 function bnpDAddOffset(n, w) {
1492 if (n == 0) return
1493 while (this.t <= w) this[this.t++] = 0
1494 this[w] += n
1495 while (this[w] >= this.DV) {
1496 this[w] -= this.DV
1497 if (++w >= this.t) this[this.t++] = 0
1498 ++this[w]
1499 }
1500 }
1501
1502 // A "null" reducer
1503 function NullExp() {}
1504
1505 function nNop(x) {
1506 return x
1507 }
1508
1509 function nMulTo(x, y, r) {
1510 x.multiplyTo(y, r)
1511 }
1512
1513 function nSqrTo(x, r) {
1514 x.squareTo(r)
1515 }
1516
1517 NullExp.prototype.convert = nNop
1518 NullExp.prototype.revert = nNop
1519 NullExp.prototype.mulTo = nMulTo
1520 NullExp.prototype.sqrTo = nSqrTo
1521
1522 // (public) this^e
1523 function bnPow(e) {
1524 return this.exp(e, new NullExp())
1525 }
1526
1527 // (protected) r = lower n words of "this * a", a.t <= n
1528 // "this" should be the larger one if appropriate.
1529 function bnpMultiplyLowerTo(a, n, r) {
1530 var i = Math.min(this.t + a.t, n)
1531 r.s = 0; // assumes a,this >= 0
1532 r.t = i
1533 while (i > 0) r[--i] = 0
1534 var j
1535 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1536 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1537 r.clamp()
1538 }
1539
1540 // (protected) r = "this * a" without lower n words, n > 0
1541 // "this" should be the larger one if appropriate.
1542 function bnpMultiplyUpperTo(a, n, r) {
1543 --n
1544 var i = r.t = this.t + a.t - n
1545 r.s = 0; // assumes a,this >= 0
1546 while (--i >= 0) r[i] = 0
1547 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1548 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1549 r.clamp()
1550 r.drShiftTo(1, r)
1551 }
1552
1553 // Barrett modular reduction
1554 function Barrett(m) {
1555 // setup Barrett
1556 this.r2 = new BigInteger()
1557 this.q3 = new BigInteger()
1558 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1559 this.mu = this.r2.divide(m)
1560 this.m = m
1561 }
1562
1563 function barrettConvert(x) {
1564 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1565 else if (x.compareTo(this.m) < 0) return x
1566 else {
1567 var r = new BigInteger()
1568 x.copyTo(r)
1569 this.reduce(r)
1570 return r
1571 }
1572 }
1573
1574 function barrettRevert(x) {
1575 return x
1576 }
1577
1578 // x = x mod m (HAC 14.42)
1579 function barrettReduce(x) {
1580 var self = this
1581 x.drShiftTo(self.m.t - 1, self.r2)
1582 if (x.t > self.m.t + 1) {
1583 x.t = self.m.t + 1
1584 x.clamp()
1585 }
1586 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1587 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1588 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1589 x.subTo(self.r2, x)
1590 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1591 }
1592
1593 // r = x^2 mod m; x != r
1594 function barrettSqrTo(x, r) {
1595 x.squareTo(r)
1596 this.reduce(r)
1597 }
1598
1599 // r = x*y mod m; x,y != r
1600 function barrettMulTo(x, y, r) {
1601 x.multiplyTo(y, r)
1602 this.reduce(r)
1603 }
1604
1605 Barrett.prototype.convert = barrettConvert
1606 Barrett.prototype.revert = barrettRevert
1607 Barrett.prototype.reduce = barrettReduce
1608 Barrett.prototype.mulTo = barrettMulTo
1609 Barrett.prototype.sqrTo = barrettSqrTo
1610
1611 // (public) this^e % m (HAC 14.85)
1612 function bnModPow(e, m) {
1613 var i = e.bitLength(),
1614 k, r = nbv(1),
1615 z
1616 if (i <= 0) return r
1617 else if (i < 18) k = 1
1618 else if (i < 48) k = 3
1619 else if (i < 144) k = 4
1620 else if (i < 768) k = 5
1621 else k = 6
1622 if (i < 8)
1623 z = new Classic(m)
1624 else if (m.isEven())
1625 z = new Barrett(m)
1626 else
1627 z = new Montgomery(m)
1628
1629 // precomputation
1630 var g = new Array(),
1631 n = 3,
1632 k1 = k - 1,
1633 km = (1 << k) - 1
1634 g[1] = z.convert(this)
1635 if (k > 1) {
1636 var g2 = new BigInteger()
1637 z.sqrTo(g[1], g2)
1638 while (n <= km) {
1639 g[n] = new BigInteger()
1640 z.mulTo(g2, g[n - 2], g[n])
1641 n += 2
1642 }
1643 }
1644
1645 var j = e.t - 1,
1646 w, is1 = true,
1647 r2 = new BigInteger(),
1648 t
1649 i = nbits(e[j]) - 1
1650 while (j >= 0) {
1651 if (i >= k1) w = (e[j] >> (i - k1)) & km
1652 else {
1653 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1654 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1655 }
1656
1657 n = k
1658 while ((w & 1) == 0) {
1659 w >>= 1
1660 --n
1661 }
1662 if ((i -= n) < 0) {
1663 i += this.DB
1664 --j
1665 }
1666 if (is1) { // ret == 1, don't bother squaring or multiplying it
1667 g[w].copyTo(r)
1668 is1 = false
1669 } else {
1670 while (n > 1) {
1671 z.sqrTo(r, r2)
1672 z.sqrTo(r2, r)
1673 n -= 2
1674 }
1675 if (n > 0) z.sqrTo(r, r2)
1676 else {
1677 t = r
1678 r = r2
1679 r2 = t
1680 }
1681 z.mulTo(r2, g[w], r)
1682 }
1683
1684 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1685 z.sqrTo(r, r2)
1686 t = r
1687 r = r2
1688 r2 = t
1689 if (--i < 0) {
1690 i = this.DB - 1
1691 --j
1692 }
1693 }
1694 }
1695 return z.revert(r)
1696 }
1697
1698 // (public) gcd(this,a) (HAC 14.54)
1699 function bnGCD(a) {
1700 var x = (this.s < 0) ? this.negate() : this.clone()
1701 var y = (a.s < 0) ? a.negate() : a.clone()
1702 if (x.compareTo(y) < 0) {
1703 var t = x
1704 x = y
1705 y = t
1706 }
1707 var i = x.getLowestSetBit(),
1708 g = y.getLowestSetBit()
1709 if (g < 0) return x
1710 if (i < g) g = i
1711 if (g > 0) {
1712 x.rShiftTo(g, x)
1713 y.rShiftTo(g, y)
1714 }
1715 while (x.signum() > 0) {
1716 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1717 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1718 if (x.compareTo(y) >= 0) {
1719 x.subTo(y, x)
1720 x.rShiftTo(1, x)
1721 } else {
1722 y.subTo(x, y)
1723 y.rShiftTo(1, y)
1724 }
1725 }
1726 if (g > 0) y.lShiftTo(g, y)
1727 return y
1728 }
1729
1730 // (protected) this % n, n < 2^26
1731 function bnpModInt(n) {
1732 if (n <= 0) return 0
1733 var d = this.DV % n,
1734 r = (this.s < 0) ? n - 1 : 0
1735 if (this.t > 0)
1736 if (d == 0) r = this[0] % n
1737 else
1738 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1739 return r
1740 }
1741
1742 // (public) 1/this % m (HAC 14.61)
1743 function bnModInverse(m) {
1744 var ac = m.isEven()
1745 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1746 var u = m.clone(),
1747 v = this.clone()
1748 var a = nbv(1),
1749 b = nbv(0),
1750 c = nbv(0),
1751 d = nbv(1)
1752 while (u.signum() != 0) {
1753 while (u.isEven()) {
1754 u.rShiftTo(1, u)
1755 if (ac) {
1756 if (!a.isEven() || !b.isEven()) {
1757 a.addTo(this, a)
1758 b.subTo(m, b)
1759 }
1760 a.rShiftTo(1, a)
1761 } else if (!b.isEven()) b.subTo(m, b)
1762 b.rShiftTo(1, b)
1763 }
1764 while (v.isEven()) {
1765 v.rShiftTo(1, v)
1766 if (ac) {
1767 if (!c.isEven() || !d.isEven()) {
1768 c.addTo(this, c)
1769 d.subTo(m, d)
1770 }
1771 c.rShiftTo(1, c)
1772 } else if (!d.isEven()) d.subTo(m, d)
1773 d.rShiftTo(1, d)
1774 }
1775 if (u.compareTo(v) >= 0) {
1776 u.subTo(v, u)
1777 if (ac) a.subTo(c, a)
1778 b.subTo(d, b)
1779 } else {
1780 v.subTo(u, v)
1781 if (ac) c.subTo(a, c)
1782 d.subTo(b, d)
1783 }
1784 }
1785 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1786 if (d.compareTo(m) >= 0) return d.subtract(m)
1787 if (d.signum() < 0) d.addTo(m, d)
1788 else return d
1789 if (d.signum() < 0) return d.add(m)
1790 else return d
1791 }
1792
1793 var lowprimes = [
1794 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1795 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1796 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1797 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1798 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1799 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1800 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1801 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1802 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1803 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1804 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1805 ]
1806
1807 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1808
1809 // (public) test primality with certainty >= 1-.5^t
1810 function bnIsProbablePrime(t) {
1811 var i, x = this.abs()
1812 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1813 for (i = 0; i < lowprimes.length; ++i)
1814 if (x[0] == lowprimes[i]) return true
1815 return false
1816 }
1817 if (x.isEven()) return false
1818 i = 1
1819 while (i < lowprimes.length) {
1820 var m = lowprimes[i],
1821 j = i + 1
1822 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1823 m = x.modInt(m)
1824 while (i < j) if (m % lowprimes[i++] == 0) return false
1825 }
1826 return x.millerRabin(t)
1827 }
1828
1829 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1830 function bnpMillerRabin(t) {
1831 var n1 = this.subtract(BigInteger.ONE)
1832 var k = n1.getLowestSetBit()
1833 if (k <= 0) return false
1834 var r = n1.shiftRight(k)
1835 t = (t + 1) >> 1
1836 if (t > lowprimes.length) t = lowprimes.length
1837 var a = new BigInteger(null)
1838 var j, bases = []
1839 for (var i = 0; i < t; ++i) {
1840 for (;;) {
1841 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1842 if (bases.indexOf(j) == -1) break
1843 }
1844 bases.push(j)
1845 a.fromInt(j)
1846 var y = a.modPow(r, this)
1847 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1848 var j = 1
1849 while (j++ < k && y.compareTo(n1) != 0) {
1850 y = y.modPowInt(2, this)
1851 if (y.compareTo(BigInteger.ONE) == 0) return false
1852 }
1853 if (y.compareTo(n1) != 0) return false
1854 }
1855 }
1856 return true
1857 }
1858
1859 // protected
1860 proto.chunkSize = bnpChunkSize
1861 proto.toRadix = bnpToRadix
1862 proto.fromRadix = bnpFromRadix
1863 proto.fromNumber = bnpFromNumber
1864 proto.bitwiseTo = bnpBitwiseTo
1865 proto.changeBit = bnpChangeBit
1866 proto.addTo = bnpAddTo
1867 proto.dMultiply = bnpDMultiply
1868 proto.dAddOffset = bnpDAddOffset
1869 proto.multiplyLowerTo = bnpMultiplyLowerTo
1870 proto.multiplyUpperTo = bnpMultiplyUpperTo
1871 proto.modInt = bnpModInt
1872 proto.millerRabin = bnpMillerRabin
1873
1874 // public
1875 proto.clone = bnClone
1876 proto.intValue = bnIntValue
1877 proto.byteValue = bnByteValue
1878 proto.shortValue = bnShortValue
1879 proto.signum = bnSigNum
1880 proto.toByteArray = bnToByteArray
1881 proto.equals = bnEquals
1882 proto.min = bnMin
1883 proto.max = bnMax
1884 proto.and = bnAnd
1885 proto.or = bnOr
1886 proto.xor = bnXor
1887 proto.andNot = bnAndNot
1888 proto.not = bnNot
1889 proto.shiftLeft = bnShiftLeft
1890 proto.shiftRight = bnShiftRight
1891 proto.getLowestSetBit = bnGetLowestSetBit
1892 proto.bitCount = bnBitCount
1893 proto.testBit = bnTestBit
1894 proto.setBit = bnSetBit
1895 proto.clearBit = bnClearBit
1896 proto.flipBit = bnFlipBit
1897 proto.add = bnAdd
1898 proto.subtract = bnSubtract
1899 proto.multiply = bnMultiply
1900 proto.divide = bnDivide
1901 proto.remainder = bnRemainder
1902 proto.divideAndRemainder = bnDivideAndRemainder
1903 proto.modPow = bnModPow
1904 proto.modInverse = bnModInverse
1905 proto.pow = bnPow
1906 proto.gcd = bnGCD
1907 proto.isProbablePrime = bnIsProbablePrime
1908
1909 // JSBN-specific extension
1910 proto.square = bnSquare
1911
1912 // constants
1913 BigInteger.ZERO = nbv(0)
1914 BigInteger.ONE = nbv(1)
1915 BigInteger.valueOf = nbv
1916
1917 module.exports = BigInteger
1918
1919 },{"../package.json":4}],2:[function(require,module,exports){
1920 (function (Buffer){
1921 // FIXME: Kind of a weird way to throw exceptions, consider removing
1922 var assert = require('assert')
1923 var BigInteger = require('./bigi')
1924
1925 /**
1926 * Turns a byte array into a big integer.
1927 *
1928 * This function will interpret a byte array as a big integer in big
1929 * endian notation.
1930 */
1931 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1932 // BigInteger expects a DER integer conformant byte array
1933 if (byteArray[0] & 0x80) {
1934 return new BigInteger([0].concat(byteArray))
1935 }
1936
1937 return new BigInteger(byteArray)
1938 }
1939
1940 /**
1941 * Returns a byte array representation of the big integer.
1942 *
1943 * This returns the absolute of the contained value in big endian
1944 * form. A value of zero results in an empty array.
1945 */
1946 BigInteger.prototype.toByteArrayUnsigned = function() {
1947 var byteArray = this.toByteArray()
1948 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1949 }
1950
1951 BigInteger.fromDERInteger = function(byteArray) {
1952 return new BigInteger(byteArray)
1953 }
1954
1955 /*
1956 * Converts BigInteger to a DER integer representation.
1957 *
1958 * The format for this value uses the most significant bit as a sign
1959 * bit. If the most significant bit is already set and the integer is
1960 * positive, a 0x00 is prepended.
1961 *
1962 * Examples:
1963 *
1964 * 0 => 0x00
1965 * 1 => 0x01
1966 * -1 => 0xff
1967 * 127 => 0x7f
1968 * -127 => 0x81
1969 * 128 => 0x0080
1970 * -128 => 0x80
1971 * 255 => 0x00ff
1972 * -255 => 0xff01
1973 * 16300 => 0x3fac
1974 * -16300 => 0xc054
1975 * 62300 => 0x00f35c
1976 * -62300 => 0xff0ca4
1977 */
1978 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1979
1980 BigInteger.fromBuffer = function(buffer) {
1981 // BigInteger expects a DER integer conformant byte array
1982 if (buffer[0] & 0x80) {
1983 var byteArray = Array.prototype.slice.call(buffer)
1984
1985 return new BigInteger([0].concat(byteArray))
1986 }
1987
1988 return new BigInteger(buffer)
1989 }
1990
1991 BigInteger.fromHex = function(hex) {
1992 if (hex === '') return BigInteger.ZERO
1993
1994 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1995 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1996 return new BigInteger(hex, 16)
1997 }
1998
1999 BigInteger.prototype.toBuffer = function(size) {
2000 var byteArray = this.toByteArrayUnsigned()
2001 var zeros = []
2002
2003 var padding = size - byteArray.length
2004 while (zeros.length < padding) zeros.push(0)
2005
2006 return new Buffer(zeros.concat(byteArray))
2007 }
2008
2009 BigInteger.prototype.toHex = function(size) {
2010 return this.toBuffer(size).toString('hex')
2011 }
2012
2013 }).call(this,require("buffer").Buffer)
2014 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2015 var BigInteger = require('./bigi')
2016
2017 //addons
2018 require('./convert')
2019
2020 module.exports = BigInteger
2021 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2022 module.exports={
2023 "name": "bigi",
2024 "version": "1.4.0",
2025 "description": "Big integers.",
2026 "keywords": [
2027 "cryptography",
2028 "math",
2029 "bitcoin",
2030 "arbitrary",
2031 "precision",
2032 "arithmetic",
2033 "big",
2034 "integer",
2035 "int",
2036 "number",
2037 "biginteger",
2038 "bigint",
2039 "bignumber",
2040 "decimal",
2041 "float"
2042 ],
2043 "devDependencies": {
2044 "mocha": "^1.20.1",
2045 "jshint": "^2.5.1",
2046 "coveralls": "^2.10.0",
2047 "istanbul": "^0.2.11"
2048 },
2049 "repository": {
2050 "url": "https://github.com/cryptocoinjs/bigi",
2051 "type": "git"
2052 },
2053 "main": "./lib/index.js",
2054 "scripts": {
2055 "test": "_mocha -- test/*.js",
2056 "jshint": "jshint --config jshint.json lib/*.js ; true",
2057 "unit": "mocha",
2058 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2059 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2060 },
2061 "dependencies": {},
2062 "testling": {
2063 "files": "test/*.js",
2064 "harness": "mocha",
2065 "browsers": [
2066 "ie/9..latest",
2067 "firefox/latest",
2068 "chrome/latest",
2069 "safari/6.0..latest",
2070 "iphone/6.0..latest",
2071 "android-browser/4.2..latest"
2072 ]
2073 },
2074 "bugs": {
2075 "url": "https://github.com/cryptocoinjs/bigi/issues"
2076 },
2077 "homepage": "https://github.com/cryptocoinjs/bigi",
2078 "_id": "bigi@1.4.0",
2079 "dist": {
2080 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2081 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2082 },
2083 "_from": "bigi@^1.4.0",
2084 "_npmVersion": "1.4.3",
2085 "_npmUser": {
2086 "name": "jp",
2087 "email": "jprichardson@gmail.com"
2088 },
2089 "maintainers": [
2090 {
2091 "name": "jp",
2092 "email": "jprichardson@gmail.com"
2093 },
2094 {
2095 "name": "midnightlightning",
2096 "email": "boydb@midnightdesign.ws"
2097 },
2098 {
2099 "name": "sidazhang",
2100 "email": "sidazhang89@gmail.com"
2101 },
2102 {
2103 "name": "nadav",
2104 "email": "npm@shesek.info"
2105 }
2106 ],
2107 "directories": {},
2108 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2109 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2110 }
2111
2112 },{}],5:[function(require,module,exports){
2113 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2114 //
2115 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2116 //
2117 // Originally from narwhal.js (http://narwhaljs.org)
2118 // Copyright (c) 2009 Thomas Robinson <280north.com>
2119 //
2120 // Permission is hereby granted, free of charge, to any person obtaining a copy
2121 // of this software and associated documentation files (the 'Software'), to
2122 // deal in the Software without restriction, including without limitation the
2123 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2124 // sell copies of the Software, and to permit persons to whom the Software is
2125 // furnished to do so, subject to the following conditions:
2126 //
2127 // The above copyright notice and this permission notice shall be included in
2128 // all copies or substantial portions of the Software.
2129 //
2130 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2131 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2132 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2133 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2134 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2135 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2136
2137 // when used in node, this will actually load the util module we depend on
2138 // versus loading the builtin util module as happens otherwise
2139 // this is a bug in node module loading as far as I am concerned
2140 var util = require('util/');
2141
2142 var pSlice = Array.prototype.slice;
2143 var hasOwn = Object.prototype.hasOwnProperty;
2144
2145 // 1. The assert module provides functions that throw
2146 // AssertionError's when particular conditions are not met. The
2147 // assert module must conform to the following interface.
2148
2149 var assert = module.exports = ok;
2150
2151 // 2. The AssertionError is defined in assert.
2152 // new assert.AssertionError({ message: message,
2153 // actual: actual,
2154 // expected: expected })
2155
2156 assert.AssertionError = function AssertionError(options) {
2157 this.name = 'AssertionError';
2158 this.actual = options.actual;
2159 this.expected = options.expected;
2160 this.operator = options.operator;
2161 if (options.message) {
2162 this.message = options.message;
2163 this.generatedMessage = false;
2164 } else {
2165 this.message = getMessage(this);
2166 this.generatedMessage = true;
2167 }
2168 var stackStartFunction = options.stackStartFunction || fail;
2169
2170 if (Error.captureStackTrace) {
2171 Error.captureStackTrace(this, stackStartFunction);
2172 }
2173 else {
2174 // non v8 browsers so we can have a stacktrace
2175 var err = new Error();
2176 if (err.stack) {
2177 var out = err.stack;
2178
2179 // try to strip useless frames
2180 var fn_name = stackStartFunction.name;
2181 var idx = out.indexOf('\n' + fn_name);
2182 if (idx >= 0) {
2183 // once we have located the function frame
2184 // we need to strip out everything before it (and its line)
2185 var next_line = out.indexOf('\n', idx + 1);
2186 out = out.substring(next_line + 1);
2187 }
2188
2189 this.stack = out;
2190 }
2191 }
2192 };
2193
2194 // assert.AssertionError instanceof Error
2195 util.inherits(assert.AssertionError, Error);
2196
2197 function replacer(key, value) {
2198 if (util.isUndefined(value)) {
2199 return '' + value;
2200 }
2201 if (util.isNumber(value) && !isFinite(value)) {
2202 return value.toString();
2203 }
2204 if (util.isFunction(value) || util.isRegExp(value)) {
2205 return value.toString();
2206 }
2207 return value;
2208 }
2209
2210 function truncate(s, n) {
2211 if (util.isString(s)) {
2212 return s.length < n ? s : s.slice(0, n);
2213 } else {
2214 return s;
2215 }
2216 }
2217
2218 function getMessage(self) {
2219 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2220 self.operator + ' ' +
2221 truncate(JSON.stringify(self.expected, replacer), 128);
2222 }
2223
2224 // At present only the three keys mentioned above are used and
2225 // understood by the spec. Implementations or sub modules can pass
2226 // other keys to the AssertionError's constructor - they will be
2227 // ignored.
2228
2229 // 3. All of the following functions must throw an AssertionError
2230 // when a corresponding condition is not met, with a message that
2231 // may be undefined if not provided. All assertion methods provide
2232 // both the actual and expected values to the assertion error for
2233 // display purposes.
2234
2235 function fail(actual, expected, message, operator, stackStartFunction) {
2236 throw new assert.AssertionError({
2237 message: message,
2238 actual: actual,
2239 expected: expected,
2240 operator: operator,
2241 stackStartFunction: stackStartFunction
2242 });
2243 }
2244
2245 // EXTENSION! allows for well behaved errors defined elsewhere.
2246 assert.fail = fail;
2247
2248 // 4. Pure assertion tests whether a value is truthy, as determined
2249 // by !!guard.
2250 // assert.ok(guard, message_opt);
2251 // This statement is equivalent to assert.equal(true, !!guard,
2252 // message_opt);. To test strictly for the value true, use
2253 // assert.strictEqual(true, guard, message_opt);.
2254
2255 function ok(value, message) {
2256 if (!value) fail(value, true, message, '==', assert.ok);
2257 }
2258 assert.ok = ok;
2259
2260 // 5. The equality assertion tests shallow, coercive equality with
2261 // ==.
2262 // assert.equal(actual, expected, message_opt);
2263
2264 assert.equal = function equal(actual, expected, message) {
2265 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2266 };
2267
2268 // 6. The non-equality assertion tests for whether two objects are not equal
2269 // with != assert.notEqual(actual, expected, message_opt);
2270
2271 assert.notEqual = function notEqual(actual, expected, message) {
2272 if (actual == expected) {
2273 fail(actual, expected, message, '!=', assert.notEqual);
2274 }
2275 };
2276
2277 // 7. The equivalence assertion tests a deep equality relation.
2278 // assert.deepEqual(actual, expected, message_opt);
2279
2280 assert.deepEqual = function deepEqual(actual, expected, message) {
2281 if (!_deepEqual(actual, expected)) {
2282 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2283 }
2284 };
2285
2286 function _deepEqual(actual, expected) {
2287 // 7.1. All identical values are equivalent, as determined by ===.
2288 if (actual === expected) {
2289 return true;
2290
2291 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2292 if (actual.length != expected.length) return false;
2293
2294 for (var i = 0; i < actual.length; i++) {
2295 if (actual[i] !== expected[i]) return false;
2296 }
2297
2298 return true;
2299
2300 // 7.2. If the expected value is a Date object, the actual value is
2301 // equivalent if it is also a Date object that refers to the same time.
2302 } else if (util.isDate(actual) && util.isDate(expected)) {
2303 return actual.getTime() === expected.getTime();
2304
2305 // 7.3 If the expected value is a RegExp object, the actual value is
2306 // equivalent if it is also a RegExp object with the same source and
2307 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2308 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2309 return actual.source === expected.source &&
2310 actual.global === expected.global &&
2311 actual.multiline === expected.multiline &&
2312 actual.lastIndex === expected.lastIndex &&
2313 actual.ignoreCase === expected.ignoreCase;
2314
2315 // 7.4. Other pairs that do not both pass typeof value == 'object',
2316 // equivalence is determined by ==.
2317 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2318 return actual == expected;
2319
2320 // 7.5 For all other Object pairs, including Array objects, equivalence is
2321 // determined by having the same number of owned properties (as verified
2322 // with Object.prototype.hasOwnProperty.call), the same set of keys
2323 // (although not necessarily the same order), equivalent values for every
2324 // corresponding key, and an identical 'prototype' property. Note: this
2325 // accounts for both named and indexed properties on Arrays.
2326 } else {
2327 return objEquiv(actual, expected);
2328 }
2329 }
2330
2331 function isArguments(object) {
2332 return Object.prototype.toString.call(object) == '[object Arguments]';
2333 }
2334
2335 function objEquiv(a, b) {
2336 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2337 return false;
2338 // an identical 'prototype' property.
2339 if (a.prototype !== b.prototype) return false;
2340 // if one is a primitive, the other must be same
2341 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2342 return a === b;
2343 }
2344 var aIsArgs = isArguments(a),
2345 bIsArgs = isArguments(b);
2346 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2347 return false;
2348 if (aIsArgs) {
2349 a = pSlice.call(a);
2350 b = pSlice.call(b);
2351 return _deepEqual(a, b);
2352 }
2353 var ka = objectKeys(a),
2354 kb = objectKeys(b),
2355 key, i;
2356 // having the same number of owned properties (keys incorporates
2357 // hasOwnProperty)
2358 if (ka.length != kb.length)
2359 return false;
2360 //the same set of keys (although not necessarily the same order),
2361 ka.sort();
2362 kb.sort();
2363 //~~~cheap key test
2364 for (i = ka.length - 1; i >= 0; i--) {
2365 if (ka[i] != kb[i])
2366 return false;
2367 }
2368 //equivalent values for every corresponding key, and
2369 //~~~possibly expensive deep test
2370 for (i = ka.length - 1; i >= 0; i--) {
2371 key = ka[i];
2372 if (!_deepEqual(a[key], b[key])) return false;
2373 }
2374 return true;
2375 }
2376
2377 // 8. The non-equivalence assertion tests for any deep inequality.
2378 // assert.notDeepEqual(actual, expected, message_opt);
2379
2380 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2381 if (_deepEqual(actual, expected)) {
2382 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2383 }
2384 };
2385
2386 // 9. The strict equality assertion tests strict equality, as determined by ===.
2387 // assert.strictEqual(actual, expected, message_opt);
2388
2389 assert.strictEqual = function strictEqual(actual, expected, message) {
2390 if (actual !== expected) {
2391 fail(actual, expected, message, '===', assert.strictEqual);
2392 }
2393 };
2394
2395 // 10. The strict non-equality assertion tests for strict inequality, as
2396 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2397
2398 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2399 if (actual === expected) {
2400 fail(actual, expected, message, '!==', assert.notStrictEqual);
2401 }
2402 };
2403
2404 function expectedException(actual, expected) {
2405 if (!actual || !expected) {
2406 return false;
2407 }
2408
2409 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2410 return expected.test(actual);
2411 } else if (actual instanceof expected) {
2412 return true;
2413 } else if (expected.call({}, actual) === true) {
2414 return true;
2415 }
2416
2417 return false;
2418 }
2419
2420 function _throws(shouldThrow, block, expected, message) {
2421 var actual;
2422
2423 if (util.isString(expected)) {
2424 message = expected;
2425 expected = null;
2426 }
2427
2428 try {
2429 block();
2430 } catch (e) {
2431 actual = e;
2432 }
2433
2434 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2435 (message ? ' ' + message : '.');
2436
2437 if (shouldThrow && !actual) {
2438 fail(actual, expected, 'Missing expected exception' + message);
2439 }
2440
2441 if (!shouldThrow && expectedException(actual, expected)) {
2442 fail(actual, expected, 'Got unwanted exception' + message);
2443 }
2444
2445 if ((shouldThrow && actual && expected &&
2446 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2447 throw actual;
2448 }
2449 }
2450
2451 // 11. Expected to throw an error:
2452 // assert.throws(block, Error_opt, message_opt);
2453
2454 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2455 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2456 };
2457
2458 // EXTENSION! This is annoying to write outside this module.
2459 assert.doesNotThrow = function(block, /*optional*/message) {
2460 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2461 };
2462
2463 assert.ifError = function(err) { if (err) {throw err;}};
2464
2465 var objectKeys = Object.keys || function (obj) {
2466 var keys = [];
2467 for (var key in obj) {
2468 if (hasOwn.call(obj, key)) keys.push(key);
2469 }
2470 return keys;
2471 };
2472
2473 },{"util/":29}],6:[function(require,module,exports){
2474
2475 },{}],7:[function(require,module,exports){
2476 /*!
2477 * The buffer module from node.js, for the browser.
2478 *
2479 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2480 * @license MIT
2481 */
2482
2483 var base64 = require('base64-js')
2484 var ieee754 = require('ieee754')
2485 var isArray = require('is-array')
2486
2487 exports.Buffer = Buffer
2488 exports.SlowBuffer = SlowBuffer
2489 exports.INSPECT_MAX_BYTES = 50
2490 Buffer.poolSize = 8192 // not used by this implementation
2491
2492 var rootParent = {}
2493
2494 /**
2495 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2496 * === true Use Uint8Array implementation (fastest)
2497 * === false Use Object implementation (most compatible, even IE6)
2498 *
2499 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2500 * Opera 11.6+, iOS 4.2+.
2501 *
2502 * Due to various browser bugs, sometimes the Object implementation will be used even
2503 * when the browser supports typed arrays.
2504 *
2505 * Note:
2506 *
2507 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2508 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2509 *
2510 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2511 * on objects.
2512 *
2513 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2514 *
2515 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2516 * incorrect length in some situations.
2517
2518 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2519 * get the Object implementation, which is slower but behaves correctly.
2520 */
2521 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2522 function Bar () {}
2523 try {
2524 var arr = new Uint8Array(1)
2525 arr.foo = function () { return 42 }
2526 arr.constructor = Bar
2527 return arr.foo() === 42 && // typed array instances can be augmented
2528 arr.constructor === Bar && // constructor can be set
2529 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2530 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2531 } catch (e) {
2532 return false
2533 }
2534 })()
2535
2536 function kMaxLength () {
2537 return Buffer.TYPED_ARRAY_SUPPORT
2538 ? 0x7fffffff
2539 : 0x3fffffff
2540 }
2541
2542 /**
2543 * Class: Buffer
2544 * =============
2545 *
2546 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2547 * with function properties for all the node `Buffer` API functions. We use
2548 * `Uint8Array` so that square bracket notation works as expected -- it returns
2549 * a single octet.
2550 *
2551 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2552 * prototype.
2553 */
2554 function Buffer (arg) {
2555 if (!(this instanceof Buffer)) {
2556 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2557 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2558 return new Buffer(arg)
2559 }
2560
2561 this.length = 0
2562 this.parent = undefined
2563
2564 // Common case.
2565 if (typeof arg === 'number') {
2566 return fromNumber(this, arg)
2567 }
2568
2569 // Slightly less common case.
2570 if (typeof arg === 'string') {
2571 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2572 }
2573
2574 // Unusual.
2575 return fromObject(this, arg)
2576 }
2577
2578 function fromNumber (that, length) {
2579 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2580 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2581 for (var i = 0; i < length; i++) {
2582 that[i] = 0
2583 }
2584 }
2585 return that
2586 }
2587
2588 function fromString (that, string, encoding) {
2589 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2590
2591 // Assumption: byteLength() return value is always < kMaxLength.
2592 var length = byteLength(string, encoding) | 0
2593 that = allocate(that, length)
2594
2595 that.write(string, encoding)
2596 return that
2597 }
2598
2599 function fromObject (that, object) {
2600 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2601
2602 if (isArray(object)) return fromArray(that, object)
2603
2604 if (object == null) {
2605 throw new TypeError('must start with number, buffer, array or string')
2606 }
2607
2608 if (typeof ArrayBuffer !== 'undefined') {
2609 if (object.buffer instanceof ArrayBuffer) {
2610 return fromTypedArray(that, object)
2611 }
2612 if (object instanceof ArrayBuffer) {
2613 return fromArrayBuffer(that, object)
2614 }
2615 }
2616
2617 if (object.length) return fromArrayLike(that, object)
2618
2619 return fromJsonObject(that, object)
2620 }
2621
2622 function fromBuffer (that, buffer) {
2623 var length = checked(buffer.length) | 0
2624 that = allocate(that, length)
2625 buffer.copy(that, 0, 0, length)
2626 return that
2627 }
2628
2629 function fromArray (that, array) {
2630 var length = checked(array.length) | 0
2631 that = allocate(that, length)
2632 for (var i = 0; i < length; i += 1) {
2633 that[i] = array[i] & 255
2634 }
2635 return that
2636 }
2637
2638 // Duplicate of fromArray() to keep fromArray() monomorphic.
2639 function fromTypedArray (that, array) {
2640 var length = checked(array.length) | 0
2641 that = allocate(that, length)
2642 // Truncating the elements is probably not what people expect from typed
2643 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2644 // of the old Buffer constructor.
2645 for (var i = 0; i < length; i += 1) {
2646 that[i] = array[i] & 255
2647 }
2648 return that
2649 }
2650
2651 function fromArrayBuffer (that, array) {
2652 if (Buffer.TYPED_ARRAY_SUPPORT) {
2653 // Return an augmented `Uint8Array` instance, for best performance
2654 array.byteLength
2655 that = Buffer._augment(new Uint8Array(array))
2656 } else {
2657 // Fallback: Return an object instance of the Buffer class
2658 that = fromTypedArray(that, new Uint8Array(array))
2659 }
2660 return that
2661 }
2662
2663 function fromArrayLike (that, array) {
2664 var length = checked(array.length) | 0
2665 that = allocate(that, length)
2666 for (var i = 0; i < length; i += 1) {
2667 that[i] = array[i] & 255
2668 }
2669 return that
2670 }
2671
2672 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2673 // Returns a zero-length buffer for inputs that don't conform to the spec.
2674 function fromJsonObject (that, object) {
2675 var array
2676 var length = 0
2677
2678 if (object.type === 'Buffer' && isArray(object.data)) {
2679 array = object.data
2680 length = checked(array.length) | 0
2681 }
2682 that = allocate(that, length)
2683
2684 for (var i = 0; i < length; i += 1) {
2685 that[i] = array[i] & 255
2686 }
2687 return that
2688 }
2689
2690 function allocate (that, length) {
2691 if (Buffer.TYPED_ARRAY_SUPPORT) {
2692 // Return an augmented `Uint8Array` instance, for best performance
2693 that = Buffer._augment(new Uint8Array(length))
2694 } else {
2695 // Fallback: Return an object instance of the Buffer class
2696 that.length = length
2697 that._isBuffer = true
2698 }
2699
2700 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2701 if (fromPool) that.parent = rootParent
2702
2703 return that
2704 }
2705
2706 function checked (length) {
2707 // Note: cannot use `length < kMaxLength` here because that fails when
2708 // length is NaN (which is otherwise coerced to zero.)
2709 if (length >= kMaxLength()) {
2710 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2711 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2712 }
2713 return length | 0
2714 }
2715
2716 function SlowBuffer (subject, encoding) {
2717 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2718
2719 var buf = new Buffer(subject, encoding)
2720 delete buf.parent
2721 return buf
2722 }
2723
2724 Buffer.isBuffer = function isBuffer (b) {
2725 return !!(b != null && b._isBuffer)
2726 }
2727
2728 Buffer.compare = function compare (a, b) {
2729 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2730 throw new TypeError('Arguments must be Buffers')
2731 }
2732
2733 if (a === b) return 0
2734
2735 var x = a.length
2736 var y = b.length
2737
2738 var i = 0
2739 var len = Math.min(x, y)
2740 while (i < len) {
2741 if (a[i] !== b[i]) break
2742
2743 ++i
2744 }
2745
2746 if (i !== len) {
2747 x = a[i]
2748 y = b[i]
2749 }
2750
2751 if (x < y) return -1
2752 if (y < x) return 1
2753 return 0
2754 }
2755
2756 Buffer.isEncoding = function isEncoding (encoding) {
2757 switch (String(encoding).toLowerCase()) {
2758 case 'hex':
2759 case 'utf8':
2760 case 'utf-8':
2761 case 'ascii':
2762 case 'binary':
2763 case 'base64':
2764 case 'raw':
2765 case 'ucs2':
2766 case 'ucs-2':
2767 case 'utf16le':
2768 case 'utf-16le':
2769 return true
2770 default:
2771 return false
2772 }
2773 }
2774
2775 Buffer.concat = function concat (list, length) {
2776 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2777
2778 if (list.length === 0) {
2779 return new Buffer(0)
2780 }
2781
2782 var i
2783 if (length === undefined) {
2784 length = 0
2785 for (i = 0; i < list.length; i++) {
2786 length += list[i].length
2787 }
2788 }
2789
2790 var buf = new Buffer(length)
2791 var pos = 0
2792 for (i = 0; i < list.length; i++) {
2793 var item = list[i]
2794 item.copy(buf, pos)
2795 pos += item.length
2796 }
2797 return buf
2798 }
2799
2800 function byteLength (string, encoding) {
2801 if (typeof string !== 'string') string = '' + string
2802
2803 var len = string.length
2804 if (len === 0) return 0
2805
2806 // Use a for loop to avoid recursion
2807 var loweredCase = false
2808 for (;;) {
2809 switch (encoding) {
2810 case 'ascii':
2811 case 'binary':
2812 // Deprecated
2813 case 'raw':
2814 case 'raws':
2815 return len
2816 case 'utf8':
2817 case 'utf-8':
2818 return utf8ToBytes(string).length
2819 case 'ucs2':
2820 case 'ucs-2':
2821 case 'utf16le':
2822 case 'utf-16le':
2823 return len * 2
2824 case 'hex':
2825 return len >>> 1
2826 case 'base64':
2827 return base64ToBytes(string).length
2828 default:
2829 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2830 encoding = ('' + encoding).toLowerCase()
2831 loweredCase = true
2832 }
2833 }
2834 }
2835 Buffer.byteLength = byteLength
2836
2837 // pre-set for values that may exist in the future
2838 Buffer.prototype.length = undefined
2839 Buffer.prototype.parent = undefined
2840
2841 function slowToString (encoding, start, end) {
2842 var loweredCase = false
2843
2844 start = start | 0
2845 end = end === undefined || end === Infinity ? this.length : end | 0
2846
2847 if (!encoding) encoding = 'utf8'
2848 if (start < 0) start = 0
2849 if (end > this.length) end = this.length
2850 if (end <= start) return ''
2851
2852 while (true) {
2853 switch (encoding) {
2854 case 'hex':
2855 return hexSlice(this, start, end)
2856
2857 case 'utf8':
2858 case 'utf-8':
2859 return utf8Slice(this, start, end)
2860
2861 case 'ascii':
2862 return asciiSlice(this, start, end)
2863
2864 case 'binary':
2865 return binarySlice(this, start, end)
2866
2867 case 'base64':
2868 return base64Slice(this, start, end)
2869
2870 case 'ucs2':
2871 case 'ucs-2':
2872 case 'utf16le':
2873 case 'utf-16le':
2874 return utf16leSlice(this, start, end)
2875
2876 default:
2877 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2878 encoding = (encoding + '').toLowerCase()
2879 loweredCase = true
2880 }
2881 }
2882 }
2883
2884 Buffer.prototype.toString = function toString () {
2885 var length = this.length | 0
2886 if (length === 0) return ''
2887 if (arguments.length === 0) return utf8Slice(this, 0, length)
2888 return slowToString.apply(this, arguments)
2889 }
2890
2891 Buffer.prototype.equals = function equals (b) {
2892 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2893 if (this === b) return true
2894 return Buffer.compare(this, b) === 0
2895 }
2896
2897 Buffer.prototype.inspect = function inspect () {
2898 var str = ''
2899 var max = exports.INSPECT_MAX_BYTES
2900 if (this.length > 0) {
2901 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2902 if (this.length > max) str += ' ... '
2903 }
2904 return '<Buffer ' + str + '>'
2905 }
2906
2907 Buffer.prototype.compare = function compare (b) {
2908 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2909 if (this === b) return 0
2910 return Buffer.compare(this, b)
2911 }
2912
2913 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2914 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2915 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2916 byteOffset >>= 0
2917
2918 if (this.length === 0) return -1
2919 if (byteOffset >= this.length) return -1
2920
2921 // Negative offsets start from the end of the buffer
2922 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
2923
2924 if (typeof val === 'string') {
2925 if (val.length === 0) return -1 // special case: looking for empty string always fails
2926 return String.prototype.indexOf.call(this, val, byteOffset)
2927 }
2928 if (Buffer.isBuffer(val)) {
2929 return arrayIndexOf(this, val, byteOffset)
2930 }
2931 if (typeof val === 'number') {
2932 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2933 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2934 }
2935 return arrayIndexOf(this, [ val ], byteOffset)
2936 }
2937
2938 function arrayIndexOf (arr, val, byteOffset) {
2939 var foundIndex = -1
2940 for (var i = 0; byteOffset + i < arr.length; i++) {
2941 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2942 if (foundIndex === -1) foundIndex = i
2943 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
2944 } else {
2945 foundIndex = -1
2946 }
2947 }
2948 return -1
2949 }
2950
2951 throw new TypeError('val must be string, number or Buffer')
2952 }
2953
2954 // `get` is deprecated
2955 Buffer.prototype.get = function get (offset) {
2956 console.log('.get() is deprecated. Access using array indexes instead.')
2957 return this.readUInt8(offset)
2958 }
2959
2960 // `set` is deprecated
2961 Buffer.prototype.set = function set (v, offset) {
2962 console.log('.set() is deprecated. Access using array indexes instead.')
2963 return this.writeUInt8(v, offset)
2964 }
2965
2966 function hexWrite (buf, string, offset, length) {
2967 offset = Number(offset) || 0
2968 var remaining = buf.length - offset
2969 if (!length) {
2970 length = remaining
2971 } else {
2972 length = Number(length)
2973 if (length > remaining) {
2974 length = remaining
2975 }
2976 }
2977
2978 // must be an even number of digits
2979 var strLen = string.length
2980 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
2981
2982 if (length > strLen / 2) {
2983 length = strLen / 2
2984 }
2985 for (var i = 0; i < length; i++) {
2986 var parsed = parseInt(string.substr(i * 2, 2), 16)
2987 if (isNaN(parsed)) throw new Error('Invalid hex string')
2988 buf[offset + i] = parsed
2989 }
2990 return i
2991 }
2992
2993 function utf8Write (buf, string, offset, length) {
2994 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2995 }
2996
2997 function asciiWrite (buf, string, offset, length) {
2998 return blitBuffer(asciiToBytes(string), buf, offset, length)
2999 }
3000
3001 function binaryWrite (buf, string, offset, length) {
3002 return asciiWrite(buf, string, offset, length)
3003 }
3004
3005 function base64Write (buf, string, offset, length) {
3006 return blitBuffer(base64ToBytes(string), buf, offset, length)
3007 }
3008
3009 function ucs2Write (buf, string, offset, length) {
3010 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3011 }
3012
3013 Buffer.prototype.write = function write (string, offset, length, encoding) {
3014 // Buffer#write(string)
3015 if (offset === undefined) {
3016 encoding = 'utf8'
3017 length = this.length
3018 offset = 0
3019 // Buffer#write(string, encoding)
3020 } else if (length === undefined && typeof offset === 'string') {
3021 encoding = offset
3022 length = this.length
3023 offset = 0
3024 // Buffer#write(string, offset[, length][, encoding])
3025 } else if (isFinite(offset)) {
3026 offset = offset | 0
3027 if (isFinite(length)) {
3028 length = length | 0
3029 if (encoding === undefined) encoding = 'utf8'
3030 } else {
3031 encoding = length
3032 length = undefined
3033 }
3034 // legacy write(string, encoding, offset, length) - remove in v0.13
3035 } else {
3036 var swap = encoding
3037 encoding = offset
3038 offset = length | 0
3039 length = swap
3040 }
3041
3042 var remaining = this.length - offset
3043 if (length === undefined || length > remaining) length = remaining
3044
3045 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3046 throw new RangeError('attempt to write outside buffer bounds')
3047 }
3048
3049 if (!encoding) encoding = 'utf8'
3050
3051 var loweredCase = false
3052 for (;;) {
3053 switch (encoding) {
3054 case 'hex':
3055 return hexWrite(this, string, offset, length)
3056
3057 case 'utf8':
3058 case 'utf-8':
3059 return utf8Write(this, string, offset, length)
3060
3061 case 'ascii':
3062 return asciiWrite(this, string, offset, length)
3063
3064 case 'binary':
3065 return binaryWrite(this, string, offset, length)
3066
3067 case 'base64':
3068 // Warning: maxLength not taken into account in base64Write
3069 return base64Write(this, string, offset, length)
3070
3071 case 'ucs2':
3072 case 'ucs-2':
3073 case 'utf16le':
3074 case 'utf-16le':
3075 return ucs2Write(this, string, offset, length)
3076
3077 default:
3078 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3079 encoding = ('' + encoding).toLowerCase()
3080 loweredCase = true
3081 }
3082 }
3083 }
3084
3085 Buffer.prototype.toJSON = function toJSON () {
3086 return {
3087 type: 'Buffer',
3088 data: Array.prototype.slice.call(this._arr || this, 0)
3089 }
3090 }
3091
3092 function base64Slice (buf, start, end) {
3093 if (start === 0 && end === buf.length) {
3094 return base64.fromByteArray(buf)
3095 } else {
3096 return base64.fromByteArray(buf.slice(start, end))
3097 }
3098 }
3099
3100 function utf8Slice (buf, start, end) {
3101 end = Math.min(buf.length, end)
3102 var firstByte
3103 var secondByte
3104 var thirdByte
3105 var fourthByte
3106 var bytesPerSequence
3107 var tempCodePoint
3108 var codePoint
3109 var res = []
3110 var i = start
3111
3112 for (; i < end; i += bytesPerSequence) {
3113 firstByte = buf[i]
3114 codePoint = 0xFFFD
3115
3116 if (firstByte > 0xEF) {
3117 bytesPerSequence = 4
3118 } else if (firstByte > 0xDF) {
3119 bytesPerSequence = 3
3120 } else if (firstByte > 0xBF) {
3121 bytesPerSequence = 2
3122 } else {
3123 bytesPerSequence = 1
3124 }
3125
3126 if (i + bytesPerSequence <= end) {
3127 switch (bytesPerSequence) {
3128 case 1:
3129 if (firstByte < 0x80) {
3130 codePoint = firstByte
3131 }
3132 break
3133 case 2:
3134 secondByte = buf[i + 1]
3135 if ((secondByte & 0xC0) === 0x80) {
3136 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3137 if (tempCodePoint > 0x7F) {
3138 codePoint = tempCodePoint
3139 }
3140 }
3141 break
3142 case 3:
3143 secondByte = buf[i + 1]
3144 thirdByte = buf[i + 2]
3145 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3146 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3147 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3148 codePoint = tempCodePoint
3149 }
3150 }
3151 break
3152 case 4:
3153 secondByte = buf[i + 1]
3154 thirdByte = buf[i + 2]
3155 fourthByte = buf[i + 3]
3156 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3157 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3158 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3159 codePoint = tempCodePoint
3160 }
3161 }
3162 }
3163 }
3164
3165 if (codePoint === 0xFFFD) {
3166 // we generated an invalid codePoint so make sure to only advance by 1 byte
3167 bytesPerSequence = 1
3168 } else if (codePoint > 0xFFFF) {
3169 // encode to utf16 (surrogate pair dance)
3170 codePoint -= 0x10000
3171 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3172 codePoint = 0xDC00 | codePoint & 0x3FF
3173 }
3174
3175 res.push(codePoint)
3176 }
3177
3178 return String.fromCharCode.apply(String, res)
3179 }
3180
3181 function asciiSlice (buf, start, end) {
3182 var ret = ''
3183 end = Math.min(buf.length, end)
3184
3185 for (var i = start; i < end; i++) {
3186 ret += String.fromCharCode(buf[i] & 0x7F)
3187 }
3188 return ret
3189 }
3190
3191 function binarySlice (buf, start, end) {
3192 var ret = ''
3193 end = Math.min(buf.length, end)
3194
3195 for (var i = start; i < end; i++) {
3196 ret += String.fromCharCode(buf[i])
3197 }
3198 return ret
3199 }
3200
3201 function hexSlice (buf, start, end) {
3202 var len = buf.length
3203
3204 if (!start || start < 0) start = 0
3205 if (!end || end < 0 || end > len) end = len
3206
3207 var out = ''
3208 for (var i = start; i < end; i++) {
3209 out += toHex(buf[i])
3210 }
3211 return out
3212 }
3213
3214 function utf16leSlice (buf, start, end) {
3215 var bytes = buf.slice(start, end)
3216 var res = ''
3217 for (var i = 0; i < bytes.length; i += 2) {
3218 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3219 }
3220 return res
3221 }
3222
3223 Buffer.prototype.slice = function slice (start, end) {
3224 var len = this.length
3225 start = ~~start
3226 end = end === undefined ? len : ~~end
3227
3228 if (start < 0) {
3229 start += len
3230 if (start < 0) start = 0
3231 } else if (start > len) {
3232 start = len
3233 }
3234
3235 if (end < 0) {
3236 end += len
3237 if (end < 0) end = 0
3238 } else if (end > len) {
3239 end = len
3240 }
3241
3242 if (end < start) end = start
3243
3244 var newBuf
3245 if (Buffer.TYPED_ARRAY_SUPPORT) {
3246 newBuf = Buffer._augment(this.subarray(start, end))
3247 } else {
3248 var sliceLen = end - start
3249 newBuf = new Buffer(sliceLen, undefined)
3250 for (var i = 0; i < sliceLen; i++) {
3251 newBuf[i] = this[i + start]
3252 }
3253 }
3254
3255 if (newBuf.length) newBuf.parent = this.parent || this
3256
3257 return newBuf
3258 }
3259
3260 /*
3261 * Need to make sure that buffer isn't trying to write out of bounds.
3262 */
3263 function checkOffset (offset, ext, length) {
3264 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3265 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3266 }
3267
3268 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3269 offset = offset | 0
3270 byteLength = byteLength | 0
3271 if (!noAssert) checkOffset(offset, byteLength, this.length)
3272
3273 var val = this[offset]
3274 var mul = 1
3275 var i = 0
3276 while (++i < byteLength && (mul *= 0x100)) {
3277 val += this[offset + i] * mul
3278 }
3279
3280 return val
3281 }
3282
3283 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3284 offset = offset | 0
3285 byteLength = byteLength | 0
3286 if (!noAssert) {
3287 checkOffset(offset, byteLength, this.length)
3288 }
3289
3290 var val = this[offset + --byteLength]
3291 var mul = 1
3292 while (byteLength > 0 && (mul *= 0x100)) {
3293 val += this[offset + --byteLength] * mul
3294 }
3295
3296 return val
3297 }
3298
3299 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3300 if (!noAssert) checkOffset(offset, 1, this.length)
3301 return this[offset]
3302 }
3303
3304 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3305 if (!noAssert) checkOffset(offset, 2, this.length)
3306 return this[offset] | (this[offset + 1] << 8)
3307 }
3308
3309 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3310 if (!noAssert) checkOffset(offset, 2, this.length)
3311 return (this[offset] << 8) | this[offset + 1]
3312 }
3313
3314 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3315 if (!noAssert) checkOffset(offset, 4, this.length)
3316
3317 return ((this[offset]) |
3318 (this[offset + 1] << 8) |
3319 (this[offset + 2] << 16)) +
3320 (this[offset + 3] * 0x1000000)
3321 }
3322
3323 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3324 if (!noAssert) checkOffset(offset, 4, this.length)
3325
3326 return (this[offset] * 0x1000000) +
3327 ((this[offset + 1] << 16) |
3328 (this[offset + 2] << 8) |
3329 this[offset + 3])
3330 }
3331
3332 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3333 offset = offset | 0
3334 byteLength = byteLength | 0
3335 if (!noAssert) checkOffset(offset, byteLength, this.length)
3336
3337 var val = this[offset]
3338 var mul = 1
3339 var i = 0
3340 while (++i < byteLength && (mul *= 0x100)) {
3341 val += this[offset + i] * mul
3342 }
3343 mul *= 0x80
3344
3345 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3346
3347 return val
3348 }
3349
3350 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3351 offset = offset | 0
3352 byteLength = byteLength | 0
3353 if (!noAssert) checkOffset(offset, byteLength, this.length)
3354
3355 var i = byteLength
3356 var mul = 1
3357 var val = this[offset + --i]
3358 while (i > 0 && (mul *= 0x100)) {
3359 val += this[offset + --i] * mul
3360 }
3361 mul *= 0x80
3362
3363 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3364
3365 return val
3366 }
3367
3368 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3369 if (!noAssert) checkOffset(offset, 1, this.length)
3370 if (!(this[offset] & 0x80)) return (this[offset])
3371 return ((0xff - this[offset] + 1) * -1)
3372 }
3373
3374 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3375 if (!noAssert) checkOffset(offset, 2, this.length)
3376 var val = this[offset] | (this[offset + 1] << 8)
3377 return (val & 0x8000) ? val | 0xFFFF0000 : val
3378 }
3379
3380 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3381 if (!noAssert) checkOffset(offset, 2, this.length)
3382 var val = this[offset + 1] | (this[offset] << 8)
3383 return (val & 0x8000) ? val | 0xFFFF0000 : val
3384 }
3385
3386 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3387 if (!noAssert) checkOffset(offset, 4, this.length)
3388
3389 return (this[offset]) |
3390 (this[offset + 1] << 8) |
3391 (this[offset + 2] << 16) |
3392 (this[offset + 3] << 24)
3393 }
3394
3395 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3396 if (!noAssert) checkOffset(offset, 4, this.length)
3397
3398 return (this[offset] << 24) |
3399 (this[offset + 1] << 16) |
3400 (this[offset + 2] << 8) |
3401 (this[offset + 3])
3402 }
3403
3404 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3405 if (!noAssert) checkOffset(offset, 4, this.length)
3406 return ieee754.read(this, offset, true, 23, 4)
3407 }
3408
3409 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3410 if (!noAssert) checkOffset(offset, 4, this.length)
3411 return ieee754.read(this, offset, false, 23, 4)
3412 }
3413
3414 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3415 if (!noAssert) checkOffset(offset, 8, this.length)
3416 return ieee754.read(this, offset, true, 52, 8)
3417 }
3418
3419 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3420 if (!noAssert) checkOffset(offset, 8, this.length)
3421 return ieee754.read(this, offset, false, 52, 8)
3422 }
3423
3424 function checkInt (buf, value, offset, ext, max, min) {
3425 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3426 if (value > max || value < min) throw new RangeError('value is out of bounds')
3427 if (offset + ext > buf.length) throw new RangeError('index out of range')
3428 }
3429
3430 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3431 value = +value
3432 offset = offset | 0
3433 byteLength = byteLength | 0
3434 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3435
3436 var mul = 1
3437 var i = 0
3438 this[offset] = value & 0xFF
3439 while (++i < byteLength && (mul *= 0x100)) {
3440 this[offset + i] = (value / mul) & 0xFF
3441 }
3442
3443 return offset + byteLength
3444 }
3445
3446 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3447 value = +value
3448 offset = offset | 0
3449 byteLength = byteLength | 0
3450 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3451
3452 var i = byteLength - 1
3453 var mul = 1
3454 this[offset + i] = value & 0xFF
3455 while (--i >= 0 && (mul *= 0x100)) {
3456 this[offset + i] = (value / mul) & 0xFF
3457 }
3458
3459 return offset + byteLength
3460 }
3461
3462 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3463 value = +value
3464 offset = offset | 0
3465 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3466 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3467 this[offset] = value
3468 return offset + 1
3469 }
3470
3471 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3472 if (value < 0) value = 0xffff + value + 1
3473 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3474 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3475 (littleEndian ? i : 1 - i) * 8
3476 }
3477 }
3478
3479 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3480 value = +value
3481 offset = offset | 0
3482 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3483 if (Buffer.TYPED_ARRAY_SUPPORT) {
3484 this[offset] = value
3485 this[offset + 1] = (value >>> 8)
3486 } else {
3487 objectWriteUInt16(this, value, offset, true)
3488 }
3489 return offset + 2
3490 }
3491
3492 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3493 value = +value
3494 offset = offset | 0
3495 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3496 if (Buffer.TYPED_ARRAY_SUPPORT) {
3497 this[offset] = (value >>> 8)
3498 this[offset + 1] = value
3499 } else {
3500 objectWriteUInt16(this, value, offset, false)
3501 }
3502 return offset + 2
3503 }
3504
3505 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3506 if (value < 0) value = 0xffffffff + value + 1
3507 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3508 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3509 }
3510 }
3511
3512 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3513 value = +value
3514 offset = offset | 0
3515 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3516 if (Buffer.TYPED_ARRAY_SUPPORT) {
3517 this[offset + 3] = (value >>> 24)
3518 this[offset + 2] = (value >>> 16)
3519 this[offset + 1] = (value >>> 8)
3520 this[offset] = value
3521 } else {
3522 objectWriteUInt32(this, value, offset, true)
3523 }
3524 return offset + 4
3525 }
3526
3527 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3528 value = +value
3529 offset = offset | 0
3530 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3531 if (Buffer.TYPED_ARRAY_SUPPORT) {
3532 this[offset] = (value >>> 24)
3533 this[offset + 1] = (value >>> 16)
3534 this[offset + 2] = (value >>> 8)
3535 this[offset + 3] = value
3536 } else {
3537 objectWriteUInt32(this, value, offset, false)
3538 }
3539 return offset + 4
3540 }
3541
3542 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3543 value = +value
3544 offset = offset | 0
3545 if (!noAssert) {
3546 var limit = Math.pow(2, 8 * byteLength - 1)
3547
3548 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3549 }
3550
3551 var i = 0
3552 var mul = 1
3553 var sub = value < 0 ? 1 : 0
3554 this[offset] = value & 0xFF
3555 while (++i < byteLength && (mul *= 0x100)) {
3556 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3557 }
3558
3559 return offset + byteLength
3560 }
3561
3562 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3563 value = +value
3564 offset = offset | 0
3565 if (!noAssert) {
3566 var limit = Math.pow(2, 8 * byteLength - 1)
3567
3568 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3569 }
3570
3571 var i = byteLength - 1
3572 var mul = 1
3573 var sub = value < 0 ? 1 : 0
3574 this[offset + i] = value & 0xFF
3575 while (--i >= 0 && (mul *= 0x100)) {
3576 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3577 }
3578
3579 return offset + byteLength
3580 }
3581
3582 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3583 value = +value
3584 offset = offset | 0
3585 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3586 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3587 if (value < 0) value = 0xff + value + 1
3588 this[offset] = value
3589 return offset + 1
3590 }
3591
3592 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3593 value = +value
3594 offset = offset | 0
3595 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3596 if (Buffer.TYPED_ARRAY_SUPPORT) {
3597 this[offset] = value
3598 this[offset + 1] = (value >>> 8)
3599 } else {
3600 objectWriteUInt16(this, value, offset, true)
3601 }
3602 return offset + 2
3603 }
3604
3605 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3606 value = +value
3607 offset = offset | 0
3608 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3609 if (Buffer.TYPED_ARRAY_SUPPORT) {
3610 this[offset] = (value >>> 8)
3611 this[offset + 1] = value
3612 } else {
3613 objectWriteUInt16(this, value, offset, false)
3614 }
3615 return offset + 2
3616 }
3617
3618 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3619 value = +value
3620 offset = offset | 0
3621 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3622 if (Buffer.TYPED_ARRAY_SUPPORT) {
3623 this[offset] = value
3624 this[offset + 1] = (value >>> 8)
3625 this[offset + 2] = (value >>> 16)
3626 this[offset + 3] = (value >>> 24)
3627 } else {
3628 objectWriteUInt32(this, value, offset, true)
3629 }
3630 return offset + 4
3631 }
3632
3633 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3634 value = +value
3635 offset = offset | 0
3636 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3637 if (value < 0) value = 0xffffffff + value + 1
3638 if (Buffer.TYPED_ARRAY_SUPPORT) {
3639 this[offset] = (value >>> 24)
3640 this[offset + 1] = (value >>> 16)
3641 this[offset + 2] = (value >>> 8)
3642 this[offset + 3] = value
3643 } else {
3644 objectWriteUInt32(this, value, offset, false)
3645 }
3646 return offset + 4
3647 }
3648
3649 function checkIEEE754 (buf, value, offset, ext, max, min) {
3650 if (value > max || value < min) throw new RangeError('value is out of bounds')
3651 if (offset + ext > buf.length) throw new RangeError('index out of range')
3652 if (offset < 0) throw new RangeError('index out of range')
3653 }
3654
3655 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3656 if (!noAssert) {
3657 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3658 }
3659 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3660 return offset + 4
3661 }
3662
3663 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3664 return writeFloat(this, value, offset, true, noAssert)
3665 }
3666
3667 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3668 return writeFloat(this, value, offset, false, noAssert)
3669 }
3670
3671 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3672 if (!noAssert) {
3673 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3674 }
3675 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3676 return offset + 8
3677 }
3678
3679 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3680 return writeDouble(this, value, offset, true, noAssert)
3681 }
3682
3683 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3684 return writeDouble(this, value, offset, false, noAssert)
3685 }
3686
3687 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3688 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3689 if (!start) start = 0
3690 if (!end && end !== 0) end = this.length
3691 if (targetStart >= target.length) targetStart = target.length
3692 if (!targetStart) targetStart = 0
3693 if (end > 0 && end < start) end = start
3694
3695 // Copy 0 bytes; we're done
3696 if (end === start) return 0
3697 if (target.length === 0 || this.length === 0) return 0
3698
3699 // Fatal error conditions
3700 if (targetStart < 0) {
3701 throw new RangeError('targetStart out of bounds')
3702 }
3703 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3704 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3705
3706 // Are we oob?
3707 if (end > this.length) end = this.length
3708 if (target.length - targetStart < end - start) {
3709 end = target.length - targetStart + start
3710 }
3711
3712 var len = end - start
3713 var i
3714
3715 if (this === target && start < targetStart && targetStart < end) {
3716 // descending copy from end
3717 for (i = len - 1; i >= 0; i--) {
3718 target[i + targetStart] = this[i + start]
3719 }
3720 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3721 // ascending copy from start
3722 for (i = 0; i < len; i++) {
3723 target[i + targetStart] = this[i + start]
3724 }
3725 } else {
3726 target._set(this.subarray(start, start + len), targetStart)
3727 }
3728
3729 return len
3730 }
3731
3732 // fill(value, start=0, end=buffer.length)
3733 Buffer.prototype.fill = function fill (value, start, end) {
3734 if (!value) value = 0
3735 if (!start) start = 0
3736 if (!end) end = this.length
3737
3738 if (end < start) throw new RangeError('end < start')
3739
3740 // Fill 0 bytes; we're done
3741 if (end === start) return
3742 if (this.length === 0) return
3743
3744 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3745 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3746
3747 var i
3748 if (typeof value === 'number') {
3749 for (i = start; i < end; i++) {
3750 this[i] = value
3751 }
3752 } else {
3753 var bytes = utf8ToBytes(value.toString())
3754 var len = bytes.length
3755 for (i = start; i < end; i++) {
3756 this[i] = bytes[i % len]
3757 }
3758 }
3759
3760 return this
3761 }
3762
3763 /**
3764 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3765 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3766 */
3767 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3768 if (typeof Uint8Array !== 'undefined') {
3769 if (Buffer.TYPED_ARRAY_SUPPORT) {
3770 return (new Buffer(this)).buffer
3771 } else {
3772 var buf = new Uint8Array(this.length)
3773 for (var i = 0, len = buf.length; i < len; i += 1) {
3774 buf[i] = this[i]
3775 }
3776 return buf.buffer
3777 }
3778 } else {
3779 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3780 }
3781 }
3782
3783 // HELPER FUNCTIONS
3784 // ================
3785
3786 var BP = Buffer.prototype
3787
3788 /**
3789 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3790 */
3791 Buffer._augment = function _augment (arr) {
3792 arr.constructor = Buffer
3793 arr._isBuffer = true
3794
3795 // save reference to original Uint8Array set method before overwriting
3796 arr._set = arr.set
3797
3798 // deprecated
3799 arr.get = BP.get
3800 arr.set = BP.set
3801
3802 arr.write = BP.write
3803 arr.toString = BP.toString
3804 arr.toLocaleString = BP.toString
3805 arr.toJSON = BP.toJSON
3806 arr.equals = BP.equals
3807 arr.compare = BP.compare
3808 arr.indexOf = BP.indexOf
3809 arr.copy = BP.copy
3810 arr.slice = BP.slice
3811 arr.readUIntLE = BP.readUIntLE
3812 arr.readUIntBE = BP.readUIntBE
3813 arr.readUInt8 = BP.readUInt8
3814 arr.readUInt16LE = BP.readUInt16LE
3815 arr.readUInt16BE = BP.readUInt16BE
3816 arr.readUInt32LE = BP.readUInt32LE
3817 arr.readUInt32BE = BP.readUInt32BE
3818 arr.readIntLE = BP.readIntLE
3819 arr.readIntBE = BP.readIntBE
3820 arr.readInt8 = BP.readInt8
3821 arr.readInt16LE = BP.readInt16LE
3822 arr.readInt16BE = BP.readInt16BE
3823 arr.readInt32LE = BP.readInt32LE
3824 arr.readInt32BE = BP.readInt32BE
3825 arr.readFloatLE = BP.readFloatLE
3826 arr.readFloatBE = BP.readFloatBE
3827 arr.readDoubleLE = BP.readDoubleLE
3828 arr.readDoubleBE = BP.readDoubleBE
3829 arr.writeUInt8 = BP.writeUInt8
3830 arr.writeUIntLE = BP.writeUIntLE
3831 arr.writeUIntBE = BP.writeUIntBE
3832 arr.writeUInt16LE = BP.writeUInt16LE
3833 arr.writeUInt16BE = BP.writeUInt16BE
3834 arr.writeUInt32LE = BP.writeUInt32LE
3835 arr.writeUInt32BE = BP.writeUInt32BE
3836 arr.writeIntLE = BP.writeIntLE
3837 arr.writeIntBE = BP.writeIntBE
3838 arr.writeInt8 = BP.writeInt8
3839 arr.writeInt16LE = BP.writeInt16LE
3840 arr.writeInt16BE = BP.writeInt16BE
3841 arr.writeInt32LE = BP.writeInt32LE
3842 arr.writeInt32BE = BP.writeInt32BE
3843 arr.writeFloatLE = BP.writeFloatLE
3844 arr.writeFloatBE = BP.writeFloatBE
3845 arr.writeDoubleLE = BP.writeDoubleLE
3846 arr.writeDoubleBE = BP.writeDoubleBE
3847 arr.fill = BP.fill
3848 arr.inspect = BP.inspect
3849 arr.toArrayBuffer = BP.toArrayBuffer
3850
3851 return arr
3852 }
3853
3854 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
3855
3856 function base64clean (str) {
3857 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3858 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3859 // Node converts strings with length < 2 to ''
3860 if (str.length < 2) return ''
3861 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3862 while (str.length % 4 !== 0) {
3863 str = str + '='
3864 }
3865 return str
3866 }
3867
3868 function stringtrim (str) {
3869 if (str.trim) return str.trim()
3870 return str.replace(/^\s+|\s+$/g, '')
3871 }
3872
3873 function toHex (n) {
3874 if (n < 16) return '0' + n.toString(16)
3875 return n.toString(16)
3876 }
3877
3878 function utf8ToBytes (string, units) {
3879 units = units || Infinity
3880 var codePoint
3881 var length = string.length
3882 var leadSurrogate = null
3883 var bytes = []
3884
3885 for (var i = 0; i < length; i++) {
3886 codePoint = string.charCodeAt(i)
3887
3888 // is surrogate component
3889 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3890 // last char was a lead
3891 if (!leadSurrogate) {
3892 // no lead yet
3893 if (codePoint > 0xDBFF) {
3894 // unexpected trail
3895 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3896 continue
3897
3898 } else if (i + 1 === length) {
3899 // unpaired lead
3900 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3901 continue
3902 }
3903
3904 // valid lead
3905 leadSurrogate = codePoint
3906
3907 continue
3908 }
3909
3910 // 2 leads in a row
3911 if (codePoint < 0xDC00) {
3912 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3913 leadSurrogate = codePoint
3914 continue
3915 }
3916
3917 // valid surrogate pair
3918 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3919
3920 } else if (leadSurrogate) {
3921 // valid bmp char, but last char was a lead
3922 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3923 }
3924
3925 leadSurrogate = null
3926
3927 // encode utf8
3928 if (codePoint < 0x80) {
3929 if ((units -= 1) < 0) break
3930 bytes.push(codePoint)
3931 } else if (codePoint < 0x800) {
3932 if ((units -= 2) < 0) break
3933 bytes.push(
3934 codePoint >> 0x6 | 0xC0,
3935 codePoint & 0x3F | 0x80
3936 )
3937 } else if (codePoint < 0x10000) {
3938 if ((units -= 3) < 0) break
3939 bytes.push(
3940 codePoint >> 0xC | 0xE0,
3941 codePoint >> 0x6 & 0x3F | 0x80,
3942 codePoint & 0x3F | 0x80
3943 )
3944 } else if (codePoint < 0x110000) {
3945 if ((units -= 4) < 0) break
3946 bytes.push(
3947 codePoint >> 0x12 | 0xF0,
3948 codePoint >> 0xC & 0x3F | 0x80,
3949 codePoint >> 0x6 & 0x3F | 0x80,
3950 codePoint & 0x3F | 0x80
3951 )
3952 } else {
3953 throw new Error('Invalid code point')
3954 }
3955 }
3956
3957 return bytes
3958 }
3959
3960 function asciiToBytes (str) {
3961 var byteArray = []
3962 for (var i = 0; i < str.length; i++) {
3963 // Node's code seems to be doing this and not & 0x7F..
3964 byteArray.push(str.charCodeAt(i) & 0xFF)
3965 }
3966 return byteArray
3967 }
3968
3969 function utf16leToBytes (str, units) {
3970 var c, hi, lo
3971 var byteArray = []
3972 for (var i = 0; i < str.length; i++) {
3973 if ((units -= 2) < 0) break
3974
3975 c = str.charCodeAt(i)
3976 hi = c >> 8
3977 lo = c % 256
3978 byteArray.push(lo)
3979 byteArray.push(hi)
3980 }
3981
3982 return byteArray
3983 }
3984
3985 function base64ToBytes (str) {
3986 return base64.toByteArray(base64clean(str))
3987 }
3988
3989 function blitBuffer (src, dst, offset, length) {
3990 for (var i = 0; i < length; i++) {
3991 if ((i + offset >= dst.length) || (i >= src.length)) break
3992 dst[i + offset] = src[i]
3993 }
3994 return i
3995 }
3996
3997 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
3998 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3999
4000 ;(function (exports) {
4001 'use strict';
4002
4003 var Arr = (typeof Uint8Array !== 'undefined')
4004 ? Uint8Array
4005 : Array
4006
4007 var PLUS = '+'.charCodeAt(0)
4008 var SLASH = '/'.charCodeAt(0)
4009 var NUMBER = '0'.charCodeAt(0)
4010 var LOWER = 'a'.charCodeAt(0)
4011 var UPPER = 'A'.charCodeAt(0)
4012 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4013 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4014
4015 function decode (elt) {
4016 var code = elt.charCodeAt(0)
4017 if (code === PLUS ||
4018 code === PLUS_URL_SAFE)
4019 return 62 // '+'
4020 if (code === SLASH ||
4021 code === SLASH_URL_SAFE)
4022 return 63 // '/'
4023 if (code < NUMBER)
4024 return -1 //no match
4025 if (code < NUMBER + 10)
4026 return code - NUMBER + 26 + 26
4027 if (code < UPPER + 26)
4028 return code - UPPER
4029 if (code < LOWER + 26)
4030 return code - LOWER + 26
4031 }
4032
4033 function b64ToByteArray (b64) {
4034 var i, j, l, tmp, placeHolders, arr
4035
4036 if (b64.length % 4 > 0) {
4037 throw new Error('Invalid string. Length must be a multiple of 4')
4038 }
4039
4040 // the number of equal signs (place holders)
4041 // if there are two placeholders, than the two characters before it
4042 // represent one byte
4043 // if there is only one, then the three characters before it represent 2 bytes
4044 // this is just a cheap hack to not do indexOf twice
4045 var len = b64.length
4046 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4047
4048 // base64 is 4/3 + up to two characters of the original data
4049 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4050
4051 // if there are placeholders, only get up to the last complete 4 chars
4052 l = placeHolders > 0 ? b64.length - 4 : b64.length
4053
4054 var L = 0
4055
4056 function push (v) {
4057 arr[L++] = v
4058 }
4059
4060 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4061 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4062 push((tmp & 0xFF0000) >> 16)
4063 push((tmp & 0xFF00) >> 8)
4064 push(tmp & 0xFF)
4065 }
4066
4067 if (placeHolders === 2) {
4068 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4069 push(tmp & 0xFF)
4070 } else if (placeHolders === 1) {
4071 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4072 push((tmp >> 8) & 0xFF)
4073 push(tmp & 0xFF)
4074 }
4075
4076 return arr
4077 }
4078
4079 function uint8ToBase64 (uint8) {
4080 var i,
4081 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4082 output = "",
4083 temp, length
4084
4085 function encode (num) {
4086 return lookup.charAt(num)
4087 }
4088
4089 function tripletToBase64 (num) {
4090 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4091 }
4092
4093 // go through the array every three bytes, we'll deal with trailing stuff later
4094 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4095 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4096 output += tripletToBase64(temp)
4097 }
4098
4099 // pad the end with zeros, but make sure to not forget the extra bytes
4100 switch (extraBytes) {
4101 case 1:
4102 temp = uint8[uint8.length - 1]
4103 output += encode(temp >> 2)
4104 output += encode((temp << 4) & 0x3F)
4105 output += '=='
4106 break
4107 case 2:
4108 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4109 output += encode(temp >> 10)
4110 output += encode((temp >> 4) & 0x3F)
4111 output += encode((temp << 2) & 0x3F)
4112 output += '='
4113 break
4114 }
4115
4116 return output
4117 }
4118
4119 exports.toByteArray = b64ToByteArray
4120 exports.fromByteArray = uint8ToBase64
4121 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4122
4123 },{}],9:[function(require,module,exports){
4124 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4125 var e, m
4126 var eLen = nBytes * 8 - mLen - 1
4127 var eMax = (1 << eLen) - 1
4128 var eBias = eMax >> 1
4129 var nBits = -7
4130 var i = isLE ? (nBytes - 1) : 0
4131 var d = isLE ? -1 : 1
4132 var s = buffer[offset + i]
4133
4134 i += d
4135
4136 e = s & ((1 << (-nBits)) - 1)
4137 s >>= (-nBits)
4138 nBits += eLen
4139 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4140
4141 m = e & ((1 << (-nBits)) - 1)
4142 e >>= (-nBits)
4143 nBits += mLen
4144 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4145
4146 if (e === 0) {
4147 e = 1 - eBias
4148 } else if (e === eMax) {
4149 return m ? NaN : ((s ? -1 : 1) * Infinity)
4150 } else {
4151 m = m + Math.pow(2, mLen)
4152 e = e - eBias
4153 }
4154 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4155 }
4156
4157 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4158 var e, m, c
4159 var eLen = nBytes * 8 - mLen - 1
4160 var eMax = (1 << eLen) - 1
4161 var eBias = eMax >> 1
4162 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4163 var i = isLE ? 0 : (nBytes - 1)
4164 var d = isLE ? 1 : -1
4165 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4166
4167 value = Math.abs(value)
4168
4169 if (isNaN(value) || value === Infinity) {
4170 m = isNaN(value) ? 1 : 0
4171 e = eMax
4172 } else {
4173 e = Math.floor(Math.log(value) / Math.LN2)
4174 if (value * (c = Math.pow(2, -e)) < 1) {
4175 e--
4176 c *= 2
4177 }
4178 if (e + eBias >= 1) {
4179 value += rt / c
4180 } else {
4181 value += rt * Math.pow(2, 1 - eBias)
4182 }
4183 if (value * c >= 2) {
4184 e++
4185 c /= 2
4186 }
4187
4188 if (e + eBias >= eMax) {
4189 m = 0
4190 e = eMax
4191 } else if (e + eBias >= 1) {
4192 m = (value * c - 1) * Math.pow(2, mLen)
4193 e = e + eBias
4194 } else {
4195 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4196 e = 0
4197 }
4198 }
4199
4200 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4201
4202 e = (e << mLen) | m
4203 eLen += mLen
4204 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4205
4206 buffer[offset + i - d] |= s * 128
4207 }
4208
4209 },{}],10:[function(require,module,exports){
4210
4211 /**
4212 * isArray
4213 */
4214
4215 var isArray = Array.isArray;
4216
4217 /**
4218 * toString
4219 */
4220
4221 var str = Object.prototype.toString;
4222
4223 /**
4224 * Whether or not the given `val`
4225 * is an array.
4226 *
4227 * example:
4228 *
4229 * isArray([]);
4230 * // > true
4231 * isArray(arguments);
4232 * // > false
4233 * isArray('');
4234 * // > false
4235 *
4236 * @param {mixed} val
4237 * @return {bool}
4238 */
4239
4240 module.exports = isArray || function (val) {
4241 return !! val && '[object Array]' == str.call(val);
4242 };
4243
4244 },{}],11:[function(require,module,exports){
4245 // Copyright Joyent, Inc. and other Node contributors.
4246 //
4247 // Permission is hereby granted, free of charge, to any person obtaining a
4248 // copy of this software and associated documentation files (the
4249 // "Software"), to deal in the Software without restriction, including
4250 // without limitation the rights to use, copy, modify, merge, publish,
4251 // distribute, sublicense, and/or sell copies of the Software, and to permit
4252 // persons to whom the Software is furnished to do so, subject to the
4253 // following conditions:
4254 //
4255 // The above copyright notice and this permission notice shall be included
4256 // in all copies or substantial portions of the Software.
4257 //
4258 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4259 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4260 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4261 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4262 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4263 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4264 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4265
4266 function EventEmitter() {
4267 this._events = this._events || {};
4268 this._maxListeners = this._maxListeners || undefined;
4269 }
4270 module.exports = EventEmitter;
4271
4272 // Backwards-compat with node 0.10.x
4273 EventEmitter.EventEmitter = EventEmitter;
4274
4275 EventEmitter.prototype._events = undefined;
4276 EventEmitter.prototype._maxListeners = undefined;
4277
4278 // By default EventEmitters will print a warning if more than 10 listeners are
4279 // added to it. This is a useful default which helps finding memory leaks.
4280 EventEmitter.defaultMaxListeners = 10;
4281
4282 // Obviously not all Emitters should be limited to 10. This function allows
4283 // that to be increased. Set to zero for unlimited.
4284 EventEmitter.prototype.setMaxListeners = function(n) {
4285 if (!isNumber(n) || n < 0 || isNaN(n))
4286 throw TypeError('n must be a positive number');
4287 this._maxListeners = n;
4288 return this;
4289 };
4290
4291 EventEmitter.prototype.emit = function(type) {
4292 var er, handler, len, args, i, listeners;
4293
4294 if (!this._events)
4295 this._events = {};
4296
4297 // If there is no 'error' event listener then throw.
4298 if (type === 'error') {
4299 if (!this._events.error ||
4300 (isObject(this._events.error) && !this._events.error.length)) {
4301 er = arguments[1];
4302 if (er instanceof Error) {
4303 throw er; // Unhandled 'error' event
4304 }
4305 throw TypeError('Uncaught, unspecified "error" event.');
4306 }
4307 }
4308
4309 handler = this._events[type];
4310
4311 if (isUndefined(handler))
4312 return false;
4313
4314 if (isFunction(handler)) {
4315 switch (arguments.length) {
4316 // fast cases
4317 case 1:
4318 handler.call(this);
4319 break;
4320 case 2:
4321 handler.call(this, arguments[1]);
4322 break;
4323 case 3:
4324 handler.call(this, arguments[1], arguments[2]);
4325 break;
4326 // slower
4327 default:
4328 len = arguments.length;
4329 args = new Array(len - 1);
4330 for (i = 1; i < len; i++)
4331 args[i - 1] = arguments[i];
4332 handler.apply(this, args);
4333 }
4334 } else if (isObject(handler)) {
4335 len = arguments.length;
4336 args = new Array(len - 1);
4337 for (i = 1; i < len; i++)
4338 args[i - 1] = arguments[i];
4339
4340 listeners = handler.slice();
4341 len = listeners.length;
4342 for (i = 0; i < len; i++)
4343 listeners[i].apply(this, args);
4344 }
4345
4346 return true;
4347 };
4348
4349 EventEmitter.prototype.addListener = function(type, listener) {
4350 var m;
4351
4352 if (!isFunction(listener))
4353 throw TypeError('listener must be a function');
4354
4355 if (!this._events)
4356 this._events = {};
4357
4358 // To avoid recursion in the case that type === "newListener"! Before
4359 // adding it to the listeners, first emit "newListener".
4360 if (this._events.newListener)
4361 this.emit('newListener', type,
4362 isFunction(listener.listener) ?
4363 listener.listener : listener);
4364
4365 if (!this._events[type])
4366 // Optimize the case of one listener. Don't need the extra array object.
4367 this._events[type] = listener;
4368 else if (isObject(this._events[type]))
4369 // If we've already got an array, just append.
4370 this._events[type].push(listener);
4371 else
4372 // Adding the second element, need to change to array.
4373 this._events[type] = [this._events[type], listener];
4374
4375 // Check for listener leak
4376 if (isObject(this._events[type]) && !this._events[type].warned) {
4377 var m;
4378 if (!isUndefined(this._maxListeners)) {
4379 m = this._maxListeners;
4380 } else {
4381 m = EventEmitter.defaultMaxListeners;
4382 }
4383
4384 if (m && m > 0 && this._events[type].length > m) {
4385 this._events[type].warned = true;
4386 console.error('(node) warning: possible EventEmitter memory ' +
4387 'leak detected. %d listeners added. ' +
4388 'Use emitter.setMaxListeners() to increase limit.',
4389 this._events[type].length);
4390 if (typeof console.trace === 'function') {
4391 // not supported in IE 10
4392 console.trace();
4393 }
4394 }
4395 }
4396
4397 return this;
4398 };
4399
4400 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4401
4402 EventEmitter.prototype.once = function(type, listener) {
4403 if (!isFunction(listener))
4404 throw TypeError('listener must be a function');
4405
4406 var fired = false;
4407
4408 function g() {
4409 this.removeListener(type, g);
4410
4411 if (!fired) {
4412 fired = true;
4413 listener.apply(this, arguments);
4414 }
4415 }
4416
4417 g.listener = listener;
4418 this.on(type, g);
4419
4420 return this;
4421 };
4422
4423 // emits a 'removeListener' event iff the listener was removed
4424 EventEmitter.prototype.removeListener = function(type, listener) {
4425 var list, position, length, i;
4426
4427 if (!isFunction(listener))
4428 throw TypeError('listener must be a function');
4429
4430 if (!this._events || !this._events[type])
4431 return this;
4432
4433 list = this._events[type];
4434 length = list.length;
4435 position = -1;
4436
4437 if (list === listener ||
4438 (isFunction(list.listener) && list.listener === listener)) {
4439 delete this._events[type];
4440 if (this._events.removeListener)
4441 this.emit('removeListener', type, listener);
4442
4443 } else if (isObject(list)) {
4444 for (i = length; i-- > 0;) {
4445 if (list[i] === listener ||
4446 (list[i].listener && list[i].listener === listener)) {
4447 position = i;
4448 break;
4449 }
4450 }
4451
4452 if (position < 0)
4453 return this;
4454
4455 if (list.length === 1) {
4456 list.length = 0;
4457 delete this._events[type];
4458 } else {
4459 list.splice(position, 1);
4460 }
4461
4462 if (this._events.removeListener)
4463 this.emit('removeListener', type, listener);
4464 }
4465
4466 return this;
4467 };
4468
4469 EventEmitter.prototype.removeAllListeners = function(type) {
4470 var key, listeners;
4471
4472 if (!this._events)
4473 return this;
4474
4475 // not listening for removeListener, no need to emit
4476 if (!this._events.removeListener) {
4477 if (arguments.length === 0)
4478 this._events = {};
4479 else if (this._events[type])
4480 delete this._events[type];
4481 return this;
4482 }
4483
4484 // emit removeListener for all listeners on all events
4485 if (arguments.length === 0) {
4486 for (key in this._events) {
4487 if (key === 'removeListener') continue;
4488 this.removeAllListeners(key);
4489 }
4490 this.removeAllListeners('removeListener');
4491 this._events = {};
4492 return this;
4493 }
4494
4495 listeners = this._events[type];
4496
4497 if (isFunction(listeners)) {
4498 this.removeListener(type, listeners);
4499 } else {
4500 // LIFO order
4501 while (listeners.length)
4502 this.removeListener(type, listeners[listeners.length - 1]);
4503 }
4504 delete this._events[type];
4505
4506 return this;
4507 };
4508
4509 EventEmitter.prototype.listeners = function(type) {
4510 var ret;
4511 if (!this._events || !this._events[type])
4512 ret = [];
4513 else if (isFunction(this._events[type]))
4514 ret = [this._events[type]];
4515 else
4516 ret = this._events[type].slice();
4517 return ret;
4518 };
4519
4520 EventEmitter.listenerCount = function(emitter, type) {
4521 var ret;
4522 if (!emitter._events || !emitter._events[type])
4523 ret = 0;
4524 else if (isFunction(emitter._events[type]))
4525 ret = 1;
4526 else
4527 ret = emitter._events[type].length;
4528 return ret;
4529 };
4530
4531 function isFunction(arg) {
4532 return typeof arg === 'function';
4533 }
4534
4535 function isNumber(arg) {
4536 return typeof arg === 'number';
4537 }
4538
4539 function isObject(arg) {
4540 return typeof arg === 'object' && arg !== null;
4541 }
4542
4543 function isUndefined(arg) {
4544 return arg === void 0;
4545 }
4546
4547 },{}],12:[function(require,module,exports){
4548 if (typeof Object.create === 'function') {
4549 // implementation from standard node.js 'util' module
4550 module.exports = function inherits(ctor, superCtor) {
4551 ctor.super_ = superCtor
4552 ctor.prototype = Object.create(superCtor.prototype, {
4553 constructor: {
4554 value: ctor,
4555 enumerable: false,
4556 writable: true,
4557 configurable: true
4558 }
4559 });
4560 };
4561 } else {
4562 // old school shim for old browsers
4563 module.exports = function inherits(ctor, superCtor) {
4564 ctor.super_ = superCtor
4565 var TempCtor = function () {}
4566 TempCtor.prototype = superCtor.prototype
4567 ctor.prototype = new TempCtor()
4568 ctor.prototype.constructor = ctor
4569 }
4570 }
4571
4572 },{}],13:[function(require,module,exports){
4573 module.exports = Array.isArray || function (arr) {
4574 return Object.prototype.toString.call(arr) == '[object Array]';
4575 };
4576
4577 },{}],14:[function(require,module,exports){
4578 // shim for using process in browser
4579
4580 var process = module.exports = {};
4581 var queue = [];
4582 var draining = false;
4583 var currentQueue;
4584 var queueIndex = -1;
4585
4586 function cleanUpNextTick() {
4587 draining = false;
4588 if (currentQueue.length) {
4589 queue = currentQueue.concat(queue);
4590 } else {
4591 queueIndex = -1;
4592 }
4593 if (queue.length) {
4594 drainQueue();
4595 }
4596 }
4597
4598 function drainQueue() {
4599 if (draining) {
4600 return;
4601 }
4602 var timeout = setTimeout(cleanUpNextTick);
4603 draining = true;
4604
4605 var len = queue.length;
4606 while(len) {
4607 currentQueue = queue;
4608 queue = [];
4609 while (++queueIndex < len) {
4610 currentQueue[queueIndex].run();
4611 }
4612 queueIndex = -1;
4613 len = queue.length;
4614 }
4615 currentQueue = null;
4616 draining = false;
4617 clearTimeout(timeout);
4618 }
4619
4620 process.nextTick = function (fun) {
4621 var args = new Array(arguments.length - 1);
4622 if (arguments.length > 1) {
4623 for (var i = 1; i < arguments.length; i++) {
4624 args[i - 1] = arguments[i];
4625 }
4626 }
4627 queue.push(new Item(fun, args));
4628 if (queue.length === 1 && !draining) {
4629 setTimeout(drainQueue, 0);
4630 }
4631 };
4632
4633 // v8 likes predictible objects
4634 function Item(fun, array) {
4635 this.fun = fun;
4636 this.array = array;
4637 }
4638 Item.prototype.run = function () {
4639 this.fun.apply(null, this.array);
4640 };
4641 process.title = 'browser';
4642 process.browser = true;
4643 process.env = {};
4644 process.argv = [];
4645 process.version = ''; // empty string to avoid regexp issues
4646 process.versions = {};
4647
4648 function noop() {}
4649
4650 process.on = noop;
4651 process.addListener = noop;
4652 process.once = noop;
4653 process.off = noop;
4654 process.removeListener = noop;
4655 process.removeAllListeners = noop;
4656 process.emit = noop;
4657
4658 process.binding = function (name) {
4659 throw new Error('process.binding is not supported');
4660 };
4661
4662 // TODO(shtylman)
4663 process.cwd = function () { return '/' };
4664 process.chdir = function (dir) {
4665 throw new Error('process.chdir is not supported');
4666 };
4667 process.umask = function() { return 0; };
4668
4669 },{}],15:[function(require,module,exports){
4670 module.exports = require("./lib/_stream_duplex.js")
4671
4672 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4673 (function (process){
4674 // Copyright Joyent, Inc. and other Node contributors.
4675 //
4676 // Permission is hereby granted, free of charge, to any person obtaining a
4677 // copy of this software and associated documentation files (the
4678 // "Software"), to deal in the Software without restriction, including
4679 // without limitation the rights to use, copy, modify, merge, publish,
4680 // distribute, sublicense, and/or sell copies of the Software, and to permit
4681 // persons to whom the Software is furnished to do so, subject to the
4682 // following conditions:
4683 //
4684 // The above copyright notice and this permission notice shall be included
4685 // in all copies or substantial portions of the Software.
4686 //
4687 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4688 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4689 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4690 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4691 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4692 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4693 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4694
4695 // a duplex stream is just a stream that is both readable and writable.
4696 // Since JS doesn't have multiple prototypal inheritance, this class
4697 // prototypally inherits from Readable, and then parasitically from
4698 // Writable.
4699
4700 module.exports = Duplex;
4701
4702 /*<replacement>*/
4703 var objectKeys = Object.keys || function (obj) {
4704 var keys = [];
4705 for (var key in obj) keys.push(key);
4706 return keys;
4707 }
4708 /*</replacement>*/
4709
4710
4711 /*<replacement>*/
4712 var util = require('core-util-is');
4713 util.inherits = require('inherits');
4714 /*</replacement>*/
4715
4716 var Readable = require('./_stream_readable');
4717 var Writable = require('./_stream_writable');
4718
4719 util.inherits(Duplex, Readable);
4720
4721 forEach(objectKeys(Writable.prototype), function(method) {
4722 if (!Duplex.prototype[method])
4723 Duplex.prototype[method] = Writable.prototype[method];
4724 });
4725
4726 function Duplex(options) {
4727 if (!(this instanceof Duplex))
4728 return new Duplex(options);
4729
4730 Readable.call(this, options);
4731 Writable.call(this, options);
4732
4733 if (options && options.readable === false)
4734 this.readable = false;
4735
4736 if (options && options.writable === false)
4737 this.writable = false;
4738
4739 this.allowHalfOpen = true;
4740 if (options && options.allowHalfOpen === false)
4741 this.allowHalfOpen = false;
4742
4743 this.once('end', onend);
4744 }
4745
4746 // the no-half-open enforcer
4747 function onend() {
4748 // if we allow half-open state, or if the writable side ended,
4749 // then we're ok.
4750 if (this.allowHalfOpen || this._writableState.ended)
4751 return;
4752
4753 // no more data can be written.
4754 // But allow more writes to happen in this tick.
4755 process.nextTick(this.end.bind(this));
4756 }
4757
4758 function forEach (xs, f) {
4759 for (var i = 0, l = xs.length; i < l; i++) {
4760 f(xs[i], i);
4761 }
4762 }
4763
4764 }).call(this,require('_process'))
4765 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4766 // Copyright Joyent, Inc. and other Node contributors.
4767 //
4768 // Permission is hereby granted, free of charge, to any person obtaining a
4769 // copy of this software and associated documentation files (the
4770 // "Software"), to deal in the Software without restriction, including
4771 // without limitation the rights to use, copy, modify, merge, publish,
4772 // distribute, sublicense, and/or sell copies of the Software, and to permit
4773 // persons to whom the Software is furnished to do so, subject to the
4774 // following conditions:
4775 //
4776 // The above copyright notice and this permission notice shall be included
4777 // in all copies or substantial portions of the Software.
4778 //
4779 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4780 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4781 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4782 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4783 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4784 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4785 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4786
4787 // a passthrough stream.
4788 // basically just the most minimal sort of Transform stream.
4789 // Every written chunk gets output as-is.
4790
4791 module.exports = PassThrough;
4792
4793 var Transform = require('./_stream_transform');
4794
4795 /*<replacement>*/
4796 var util = require('core-util-is');
4797 util.inherits = require('inherits');
4798 /*</replacement>*/
4799
4800 util.inherits(PassThrough, Transform);
4801
4802 function PassThrough(options) {
4803 if (!(this instanceof PassThrough))
4804 return new PassThrough(options);
4805
4806 Transform.call(this, options);
4807 }
4808
4809 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4810 cb(null, chunk);
4811 };
4812
4813 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4814 (function (process){
4815 // Copyright Joyent, Inc. and other Node contributors.
4816 //
4817 // Permission is hereby granted, free of charge, to any person obtaining a
4818 // copy of this software and associated documentation files (the
4819 // "Software"), to deal in the Software without restriction, including
4820 // without limitation the rights to use, copy, modify, merge, publish,
4821 // distribute, sublicense, and/or sell copies of the Software, and to permit
4822 // persons to whom the Software is furnished to do so, subject to the
4823 // following conditions:
4824 //
4825 // The above copyright notice and this permission notice shall be included
4826 // in all copies or substantial portions of the Software.
4827 //
4828 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4829 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4830 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4831 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4832 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4833 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4834 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4835
4836 module.exports = Readable;
4837
4838 /*<replacement>*/
4839 var isArray = require('isarray');
4840 /*</replacement>*/
4841
4842
4843 /*<replacement>*/
4844 var Buffer = require('buffer').Buffer;
4845 /*</replacement>*/
4846
4847 Readable.ReadableState = ReadableState;
4848
4849 var EE = require('events').EventEmitter;
4850
4851 /*<replacement>*/
4852 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4853 return emitter.listeners(type).length;
4854 };
4855 /*</replacement>*/
4856
4857 var Stream = require('stream');
4858
4859 /*<replacement>*/
4860 var util = require('core-util-is');
4861 util.inherits = require('inherits');
4862 /*</replacement>*/
4863
4864 var StringDecoder;
4865
4866
4867 /*<replacement>*/
4868 var debug = require('util');
4869 if (debug && debug.debuglog) {
4870 debug = debug.debuglog('stream');
4871 } else {
4872 debug = function () {};
4873 }
4874 /*</replacement>*/
4875
4876
4877 util.inherits(Readable, Stream);
4878
4879 function ReadableState(options, stream) {
4880 var Duplex = require('./_stream_duplex');
4881
4882 options = options || {};
4883
4884 // the point at which it stops calling _read() to fill the buffer
4885 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4886 var hwm = options.highWaterMark;
4887 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4888 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4889
4890 // cast to ints.
4891 this.highWaterMark = ~~this.highWaterMark;
4892
4893 this.buffer = [];
4894 this.length = 0;
4895 this.pipes = null;
4896 this.pipesCount = 0;
4897 this.flowing = null;
4898 this.ended = false;
4899 this.endEmitted = false;
4900 this.reading = false;
4901
4902 // a flag to be able to tell if the onwrite cb is called immediately,
4903 // or on a later tick. We set this to true at first, because any
4904 // actions that shouldn't happen until "later" should generally also
4905 // not happen before the first write call.
4906 this.sync = true;
4907
4908 // whenever we return null, then we set a flag to say
4909 // that we're awaiting a 'readable' event emission.
4910 this.needReadable = false;
4911 this.emittedReadable = false;
4912 this.readableListening = false;
4913
4914
4915 // object stream flag. Used to make read(n) ignore n and to
4916 // make all the buffer merging and length checks go away
4917 this.objectMode = !!options.objectMode;
4918
4919 if (stream instanceof Duplex)
4920 this.objectMode = this.objectMode || !!options.readableObjectMode;
4921
4922 // Crypto is kind of old and crusty. Historically, its default string
4923 // encoding is 'binary' so we have to make this configurable.
4924 // Everything else in the universe uses 'utf8', though.
4925 this.defaultEncoding = options.defaultEncoding || 'utf8';
4926
4927 // when piping, we only care about 'readable' events that happen
4928 // after read()ing all the bytes and not getting any pushback.
4929 this.ranOut = false;
4930
4931 // the number of writers that are awaiting a drain event in .pipe()s
4932 this.awaitDrain = 0;
4933
4934 // if true, a maybeReadMore has been scheduled
4935 this.readingMore = false;
4936
4937 this.decoder = null;
4938 this.encoding = null;
4939 if (options.encoding) {
4940 if (!StringDecoder)
4941 StringDecoder = require('string_decoder/').StringDecoder;
4942 this.decoder = new StringDecoder(options.encoding);
4943 this.encoding = options.encoding;
4944 }
4945 }
4946
4947 function Readable(options) {
4948 var Duplex = require('./_stream_duplex');
4949
4950 if (!(this instanceof Readable))
4951 return new Readable(options);
4952
4953 this._readableState = new ReadableState(options, this);
4954
4955 // legacy
4956 this.readable = true;
4957
4958 Stream.call(this);
4959 }
4960
4961 // Manually shove something into the read() buffer.
4962 // This returns true if the highWaterMark has not been hit yet,
4963 // similar to how Writable.write() returns true if you should
4964 // write() some more.
4965 Readable.prototype.push = function(chunk, encoding) {
4966 var state = this._readableState;
4967
4968 if (util.isString(chunk) && !state.objectMode) {
4969 encoding = encoding || state.defaultEncoding;
4970 if (encoding !== state.encoding) {
4971 chunk = new Buffer(chunk, encoding);
4972 encoding = '';
4973 }
4974 }
4975
4976 return readableAddChunk(this, state, chunk, encoding, false);
4977 };
4978
4979 // Unshift should *always* be something directly out of read()
4980 Readable.prototype.unshift = function(chunk) {
4981 var state = this._readableState;
4982 return readableAddChunk(this, state, chunk, '', true);
4983 };
4984
4985 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4986 var er = chunkInvalid(state, chunk);
4987 if (er) {
4988 stream.emit('error', er);
4989 } else if (util.isNullOrUndefined(chunk)) {
4990 state.reading = false;
4991 if (!state.ended)
4992 onEofChunk(stream, state);
4993 } else if (state.objectMode || chunk && chunk.length > 0) {
4994 if (state.ended && !addToFront) {
4995 var e = new Error('stream.push() after EOF');
4996 stream.emit('error', e);
4997 } else if (state.endEmitted && addToFront) {
4998 var e = new Error('stream.unshift() after end event');
4999 stream.emit('error', e);
5000 } else {
5001 if (state.decoder && !addToFront && !encoding)
5002 chunk = state.decoder.write(chunk);
5003
5004 if (!addToFront)
5005 state.reading = false;
5006
5007 // if we want the data now, just emit it.
5008 if (state.flowing && state.length === 0 && !state.sync) {
5009 stream.emit('data', chunk);
5010 stream.read(0);
5011 } else {
5012 // update the buffer info.
5013 state.length += state.objectMode ? 1 : chunk.length;
5014 if (addToFront)
5015 state.buffer.unshift(chunk);
5016 else
5017 state.buffer.push(chunk);
5018
5019 if (state.needReadable)
5020 emitReadable(stream);
5021 }
5022
5023 maybeReadMore(stream, state);
5024 }
5025 } else if (!addToFront) {
5026 state.reading = false;
5027 }
5028
5029 return needMoreData(state);
5030 }
5031
5032
5033
5034 // if it's past the high water mark, we can push in some more.
5035 // Also, if we have no data yet, we can stand some
5036 // more bytes. This is to work around cases where hwm=0,
5037 // such as the repl. Also, if the push() triggered a
5038 // readable event, and the user called read(largeNumber) such that
5039 // needReadable was set, then we ought to push more, so that another
5040 // 'readable' event will be triggered.
5041 function needMoreData(state) {
5042 return !state.ended &&
5043 (state.needReadable ||
5044 state.length < state.highWaterMark ||
5045 state.length === 0);
5046 }
5047
5048 // backwards compatibility.
5049 Readable.prototype.setEncoding = function(enc) {
5050 if (!StringDecoder)
5051 StringDecoder = require('string_decoder/').StringDecoder;
5052 this._readableState.decoder = new StringDecoder(enc);
5053 this._readableState.encoding = enc;
5054 return this;
5055 };
5056
5057 // Don't raise the hwm > 128MB
5058 var MAX_HWM = 0x800000;
5059 function roundUpToNextPowerOf2(n) {
5060 if (n >= MAX_HWM) {
5061 n = MAX_HWM;
5062 } else {
5063 // Get the next highest power of 2
5064 n--;
5065 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5066 n++;
5067 }
5068 return n;
5069 }
5070
5071 function howMuchToRead(n, state) {
5072 if (state.length === 0 && state.ended)
5073 return 0;
5074
5075 if (state.objectMode)
5076 return n === 0 ? 0 : 1;
5077
5078 if (isNaN(n) || util.isNull(n)) {
5079 // only flow one buffer at a time
5080 if (state.flowing && state.buffer.length)
5081 return state.buffer[0].length;
5082 else
5083 return state.length;
5084 }
5085
5086 if (n <= 0)
5087 return 0;
5088
5089 // If we're asking for more than the target buffer level,
5090 // then raise the water mark. Bump up to the next highest
5091 // power of 2, to prevent increasing it excessively in tiny
5092 // amounts.
5093 if (n > state.highWaterMark)
5094 state.highWaterMark = roundUpToNextPowerOf2(n);
5095
5096 // don't have that much. return null, unless we've ended.
5097 if (n > state.length) {
5098 if (!state.ended) {
5099 state.needReadable = true;
5100 return 0;
5101 } else
5102 return state.length;
5103 }
5104
5105 return n;
5106 }
5107
5108 // you can override either this method, or the async _read(n) below.
5109 Readable.prototype.read = function(n) {
5110 debug('read', n);
5111 var state = this._readableState;
5112 var nOrig = n;
5113
5114 if (!util.isNumber(n) || n > 0)
5115 state.emittedReadable = false;
5116
5117 // if we're doing read(0) to trigger a readable event, but we
5118 // already have a bunch of data in the buffer, then just trigger
5119 // the 'readable' event and move on.
5120 if (n === 0 &&
5121 state.needReadable &&
5122 (state.length >= state.highWaterMark || state.ended)) {
5123 debug('read: emitReadable', state.length, state.ended);
5124 if (state.length === 0 && state.ended)
5125 endReadable(this);
5126 else
5127 emitReadable(this);
5128 return null;
5129 }
5130
5131 n = howMuchToRead(n, state);
5132
5133 // if we've ended, and we're now clear, then finish it up.
5134 if (n === 0 && state.ended) {
5135 if (state.length === 0)
5136 endReadable(this);
5137 return null;
5138 }
5139
5140 // All the actual chunk generation logic needs to be
5141 // *below* the call to _read. The reason is that in certain
5142 // synthetic stream cases, such as passthrough streams, _read
5143 // may be a completely synchronous operation which may change
5144 // the state of the read buffer, providing enough data when
5145 // before there was *not* enough.
5146 //
5147 // So, the steps are:
5148 // 1. Figure out what the state of things will be after we do
5149 // a read from the buffer.
5150 //
5151 // 2. If that resulting state will trigger a _read, then call _read.
5152 // Note that this may be asynchronous, or synchronous. Yes, it is
5153 // deeply ugly to write APIs this way, but that still doesn't mean
5154 // that the Readable class should behave improperly, as streams are
5155 // designed to be sync/async agnostic.
5156 // Take note if the _read call is sync or async (ie, if the read call
5157 // has returned yet), so that we know whether or not it's safe to emit
5158 // 'readable' etc.
5159 //
5160 // 3. Actually pull the requested chunks out of the buffer and return.
5161
5162 // if we need a readable event, then we need to do some reading.
5163 var doRead = state.needReadable;
5164 debug('need readable', doRead);
5165
5166 // if we currently have less than the highWaterMark, then also read some
5167 if (state.length === 0 || state.length - n < state.highWaterMark) {
5168 doRead = true;
5169 debug('length less than watermark', doRead);
5170 }
5171
5172 // however, if we've ended, then there's no point, and if we're already
5173 // reading, then it's unnecessary.
5174 if (state.ended || state.reading) {
5175 doRead = false;
5176 debug('reading or ended', doRead);
5177 }
5178
5179 if (doRead) {
5180 debug('do read');
5181 state.reading = true;
5182 state.sync = true;
5183 // if the length is currently zero, then we *need* a readable event.
5184 if (state.length === 0)
5185 state.needReadable = true;
5186 // call internal read method
5187 this._read(state.highWaterMark);
5188 state.sync = false;
5189 }
5190
5191 // If _read pushed data synchronously, then `reading` will be false,
5192 // and we need to re-evaluate how much data we can return to the user.
5193 if (doRead && !state.reading)
5194 n = howMuchToRead(nOrig, state);
5195
5196 var ret;
5197 if (n > 0)
5198 ret = fromList(n, state);
5199 else
5200 ret = null;
5201
5202 if (util.isNull(ret)) {
5203 state.needReadable = true;
5204 n = 0;
5205 }
5206
5207 state.length -= n;
5208
5209 // If we have nothing in the buffer, then we want to know
5210 // as soon as we *do* get something into the buffer.
5211 if (state.length === 0 && !state.ended)
5212 state.needReadable = true;
5213
5214 // If we tried to read() past the EOF, then emit end on the next tick.
5215 if (nOrig !== n && state.ended && state.length === 0)
5216 endReadable(this);
5217
5218 if (!util.isNull(ret))
5219 this.emit('data', ret);
5220
5221 return ret;
5222 };
5223
5224 function chunkInvalid(state, chunk) {
5225 var er = null;
5226 if (!util.isBuffer(chunk) &&
5227 !util.isString(chunk) &&
5228 !util.isNullOrUndefined(chunk) &&
5229 !state.objectMode) {
5230 er = new TypeError('Invalid non-string/buffer chunk');
5231 }
5232 return er;
5233 }
5234
5235
5236 function onEofChunk(stream, state) {
5237 if (state.decoder && !state.ended) {
5238 var chunk = state.decoder.end();
5239 if (chunk && chunk.length) {
5240 state.buffer.push(chunk);
5241 state.length += state.objectMode ? 1 : chunk.length;
5242 }
5243 }
5244 state.ended = true;
5245
5246 // emit 'readable' now to make sure it gets picked up.
5247 emitReadable(stream);
5248 }
5249
5250 // Don't emit readable right away in sync mode, because this can trigger
5251 // another read() call => stack overflow. This way, it might trigger
5252 // a nextTick recursion warning, but that's not so bad.
5253 function emitReadable(stream) {
5254 var state = stream._readableState;
5255 state.needReadable = false;
5256 if (!state.emittedReadable) {
5257 debug('emitReadable', state.flowing);
5258 state.emittedReadable = true;
5259 if (state.sync)
5260 process.nextTick(function() {
5261 emitReadable_(stream);
5262 });
5263 else
5264 emitReadable_(stream);
5265 }
5266 }
5267
5268 function emitReadable_(stream) {
5269 debug('emit readable');
5270 stream.emit('readable');
5271 flow(stream);
5272 }
5273
5274
5275 // at this point, the user has presumably seen the 'readable' event,
5276 // and called read() to consume some data. that may have triggered
5277 // in turn another _read(n) call, in which case reading = true if
5278 // it's in progress.
5279 // However, if we're not ended, or reading, and the length < hwm,
5280 // then go ahead and try to read some more preemptively.
5281 function maybeReadMore(stream, state) {
5282 if (!state.readingMore) {
5283 state.readingMore = true;
5284 process.nextTick(function() {
5285 maybeReadMore_(stream, state);
5286 });
5287 }
5288 }
5289
5290 function maybeReadMore_(stream, state) {
5291 var len = state.length;
5292 while (!state.reading && !state.flowing && !state.ended &&
5293 state.length < state.highWaterMark) {
5294 debug('maybeReadMore read 0');
5295 stream.read(0);
5296 if (len === state.length)
5297 // didn't get any data, stop spinning.
5298 break;
5299 else
5300 len = state.length;
5301 }
5302 state.readingMore = false;
5303 }
5304
5305 // abstract method. to be overridden in specific implementation classes.
5306 // call cb(er, data) where data is <= n in length.
5307 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5308 // arbitrary, and perhaps not very meaningful.
5309 Readable.prototype._read = function(n) {
5310 this.emit('error', new Error('not implemented'));
5311 };
5312
5313 Readable.prototype.pipe = function(dest, pipeOpts) {
5314 var src = this;
5315 var state = this._readableState;
5316
5317 switch (state.pipesCount) {
5318 case 0:
5319 state.pipes = dest;
5320 break;
5321 case 1:
5322 state.pipes = [state.pipes, dest];
5323 break;
5324 default:
5325 state.pipes.push(dest);
5326 break;
5327 }
5328 state.pipesCount += 1;
5329 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5330
5331 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5332 dest !== process.stdout &&
5333 dest !== process.stderr;
5334
5335 var endFn = doEnd ? onend : cleanup;
5336 if (state.endEmitted)
5337 process.nextTick(endFn);
5338 else
5339 src.once('end', endFn);
5340
5341 dest.on('unpipe', onunpipe);
5342 function onunpipe(readable) {
5343 debug('onunpipe');
5344 if (readable === src) {
5345 cleanup();
5346 }
5347 }
5348
5349 function onend() {
5350 debug('onend');
5351 dest.end();
5352 }
5353
5354 // when the dest drains, it reduces the awaitDrain counter
5355 // on the source. This would be more elegant with a .once()
5356 // handler in flow(), but adding and removing repeatedly is
5357 // too slow.
5358 var ondrain = pipeOnDrain(src);
5359 dest.on('drain', ondrain);
5360
5361 function cleanup() {
5362 debug('cleanup');
5363 // cleanup event handlers once the pipe is broken
5364 dest.removeListener('close', onclose);
5365 dest.removeListener('finish', onfinish);
5366 dest.removeListener('drain', ondrain);
5367 dest.removeListener('error', onerror);
5368 dest.removeListener('unpipe', onunpipe);
5369 src.removeListener('end', onend);
5370 src.removeListener('end', cleanup);
5371 src.removeListener('data', ondata);
5372
5373 // if the reader is waiting for a drain event from this
5374 // specific writer, then it would cause it to never start
5375 // flowing again.
5376 // So, if this is awaiting a drain, then we just call it now.
5377 // If we don't know, then assume that we are waiting for one.
5378 if (state.awaitDrain &&
5379 (!dest._writableState || dest._writableState.needDrain))
5380 ondrain();
5381 }
5382
5383 src.on('data', ondata);
5384 function ondata(chunk) {
5385 debug('ondata');
5386 var ret = dest.write(chunk);
5387 if (false === ret) {
5388 debug('false write response, pause',
5389 src._readableState.awaitDrain);
5390 src._readableState.awaitDrain++;
5391 src.pause();
5392 }
5393 }
5394
5395 // if the dest has an error, then stop piping into it.
5396 // however, don't suppress the throwing behavior for this.
5397 function onerror(er) {
5398 debug('onerror', er);
5399 unpipe();
5400 dest.removeListener('error', onerror);
5401 if (EE.listenerCount(dest, 'error') === 0)
5402 dest.emit('error', er);
5403 }
5404 // This is a brutally ugly hack to make sure that our error handler
5405 // is attached before any userland ones. NEVER DO THIS.
5406 if (!dest._events || !dest._events.error)
5407 dest.on('error', onerror);
5408 else if (isArray(dest._events.error))
5409 dest._events.error.unshift(onerror);
5410 else
5411 dest._events.error = [onerror, dest._events.error];
5412
5413
5414
5415 // Both close and finish should trigger unpipe, but only once.
5416 function onclose() {
5417 dest.removeListener('finish', onfinish);
5418 unpipe();
5419 }
5420 dest.once('close', onclose);
5421 function onfinish() {
5422 debug('onfinish');
5423 dest.removeListener('close', onclose);
5424 unpipe();
5425 }
5426 dest.once('finish', onfinish);
5427
5428 function unpipe() {
5429 debug('unpipe');
5430 src.unpipe(dest);
5431 }
5432
5433 // tell the dest that it's being piped to
5434 dest.emit('pipe', src);
5435
5436 // start the flow if it hasn't been started already.
5437 if (!state.flowing) {
5438 debug('pipe resume');
5439 src.resume();
5440 }
5441
5442 return dest;
5443 };
5444
5445 function pipeOnDrain(src) {
5446 return function() {
5447 var state = src._readableState;
5448 debug('pipeOnDrain', state.awaitDrain);
5449 if (state.awaitDrain)
5450 state.awaitDrain--;
5451 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5452 state.flowing = true;
5453 flow(src);
5454 }
5455 };
5456 }
5457
5458
5459 Readable.prototype.unpipe = function(dest) {
5460 var state = this._readableState;
5461
5462 // if we're not piping anywhere, then do nothing.
5463 if (state.pipesCount === 0)
5464 return this;
5465
5466 // just one destination. most common case.
5467 if (state.pipesCount === 1) {
5468 // passed in one, but it's not the right one.
5469 if (dest && dest !== state.pipes)
5470 return this;
5471
5472 if (!dest)
5473 dest = state.pipes;
5474
5475 // got a match.
5476 state.pipes = null;
5477 state.pipesCount = 0;
5478 state.flowing = false;
5479 if (dest)
5480 dest.emit('unpipe', this);
5481 return this;
5482 }
5483
5484 // slow case. multiple pipe destinations.
5485
5486 if (!dest) {
5487 // remove all.
5488 var dests = state.pipes;
5489 var len = state.pipesCount;
5490 state.pipes = null;
5491 state.pipesCount = 0;
5492 state.flowing = false;
5493
5494 for (var i = 0; i < len; i++)
5495 dests[i].emit('unpipe', this);
5496 return this;
5497 }
5498
5499 // try to find the right one.
5500 var i = indexOf(state.pipes, dest);
5501 if (i === -1)
5502 return this;
5503
5504 state.pipes.splice(i, 1);
5505 state.pipesCount -= 1;
5506 if (state.pipesCount === 1)
5507 state.pipes = state.pipes[0];
5508
5509 dest.emit('unpipe', this);
5510
5511 return this;
5512 };
5513
5514 // set up data events if they are asked for
5515 // Ensure readable listeners eventually get something
5516 Readable.prototype.on = function(ev, fn) {
5517 var res = Stream.prototype.on.call(this, ev, fn);
5518
5519 // If listening to data, and it has not explicitly been paused,
5520 // then call resume to start the flow of data on the next tick.
5521 if (ev === 'data' && false !== this._readableState.flowing) {
5522 this.resume();
5523 }
5524
5525 if (ev === 'readable' && this.readable) {
5526 var state = this._readableState;
5527 if (!state.readableListening) {
5528 state.readableListening = true;
5529 state.emittedReadable = false;
5530 state.needReadable = true;
5531 if (!state.reading) {
5532 var self = this;
5533 process.nextTick(function() {
5534 debug('readable nexttick read 0');
5535 self.read(0);
5536 });
5537 } else if (state.length) {
5538 emitReadable(this, state);
5539 }
5540 }
5541 }
5542
5543 return res;
5544 };
5545 Readable.prototype.addListener = Readable.prototype.on;
5546
5547 // pause() and resume() are remnants of the legacy readable stream API
5548 // If the user uses them, then switch into old mode.
5549 Readable.prototype.resume = function() {
5550 var state = this._readableState;
5551 if (!state.flowing) {
5552 debug('resume');
5553 state.flowing = true;
5554 if (!state.reading) {
5555 debug('resume read 0');
5556 this.read(0);
5557 }
5558 resume(this, state);
5559 }
5560 return this;
5561 };
5562
5563 function resume(stream, state) {
5564 if (!state.resumeScheduled) {
5565 state.resumeScheduled = true;
5566 process.nextTick(function() {
5567 resume_(stream, state);
5568 });
5569 }
5570 }
5571
5572 function resume_(stream, state) {
5573 state.resumeScheduled = false;
5574 stream.emit('resume');
5575 flow(stream);
5576 if (state.flowing && !state.reading)
5577 stream.read(0);
5578 }
5579
5580 Readable.prototype.pause = function() {
5581 debug('call pause flowing=%j', this._readableState.flowing);
5582 if (false !== this._readableState.flowing) {
5583 debug('pause');
5584 this._readableState.flowing = false;
5585 this.emit('pause');
5586 }
5587 return this;
5588 };
5589
5590 function flow(stream) {
5591 var state = stream._readableState;
5592 debug('flow', state.flowing);
5593 if (state.flowing) {
5594 do {
5595 var chunk = stream.read();
5596 } while (null !== chunk && state.flowing);
5597 }
5598 }
5599
5600 // wrap an old-style stream as the async data source.
5601 // This is *not* part of the readable stream interface.
5602 // It is an ugly unfortunate mess of history.
5603 Readable.prototype.wrap = function(stream) {
5604 var state = this._readableState;
5605 var paused = false;
5606
5607 var self = this;
5608 stream.on('end', function() {
5609 debug('wrapped end');
5610 if (state.decoder && !state.ended) {
5611 var chunk = state.decoder.end();
5612 if (chunk && chunk.length)
5613 self.push(chunk);
5614 }
5615
5616 self.push(null);
5617 });
5618
5619 stream.on('data', function(chunk) {
5620 debug('wrapped data');
5621 if (state.decoder)
5622 chunk = state.decoder.write(chunk);
5623 if (!chunk || !state.objectMode && !chunk.length)
5624 return;
5625
5626 var ret = self.push(chunk);
5627 if (!ret) {
5628 paused = true;
5629 stream.pause();
5630 }
5631 });
5632
5633 // proxy all the other methods.
5634 // important when wrapping filters and duplexes.
5635 for (var i in stream) {
5636 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5637 this[i] = function(method) { return function() {
5638 return stream[method].apply(stream, arguments);
5639 }}(i);
5640 }
5641 }
5642
5643 // proxy certain important events.
5644 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5645 forEach(events, function(ev) {
5646 stream.on(ev, self.emit.bind(self, ev));
5647 });
5648
5649 // when we try to consume some more bytes, simply unpause the
5650 // underlying stream.
5651 self._read = function(n) {
5652 debug('wrapped _read', n);
5653 if (paused) {
5654 paused = false;
5655 stream.resume();
5656 }
5657 };
5658
5659 return self;
5660 };
5661
5662
5663
5664 // exposed for testing purposes only.
5665 Readable._fromList = fromList;
5666
5667 // Pluck off n bytes from an array of buffers.
5668 // Length is the combined lengths of all the buffers in the list.
5669 function fromList(n, state) {
5670 var list = state.buffer;
5671 var length = state.length;
5672 var stringMode = !!state.decoder;
5673 var objectMode = !!state.objectMode;
5674 var ret;
5675
5676 // nothing in the list, definitely empty.
5677 if (list.length === 0)
5678 return null;
5679
5680 if (length === 0)
5681 ret = null;
5682 else if (objectMode)
5683 ret = list.shift();
5684 else if (!n || n >= length) {
5685 // read it all, truncate the array.
5686 if (stringMode)
5687 ret = list.join('');
5688 else
5689 ret = Buffer.concat(list, length);
5690 list.length = 0;
5691 } else {
5692 // read just some of it.
5693 if (n < list[0].length) {
5694 // just take a part of the first list item.
5695 // slice is the same for buffers and strings.
5696 var buf = list[0];
5697 ret = buf.slice(0, n);
5698 list[0] = buf.slice(n);
5699 } else if (n === list[0].length) {
5700 // first list is a perfect match
5701 ret = list.shift();
5702 } else {
5703 // complex case.
5704 // we have enough to cover it, but it spans past the first buffer.
5705 if (stringMode)
5706 ret = '';
5707 else
5708 ret = new Buffer(n);
5709
5710 var c = 0;
5711 for (var i = 0, l = list.length; i < l && c < n; i++) {
5712 var buf = list[0];
5713 var cpy = Math.min(n - c, buf.length);
5714
5715 if (stringMode)
5716 ret += buf.slice(0, cpy);
5717 else
5718 buf.copy(ret, c, 0, cpy);
5719
5720 if (cpy < buf.length)
5721 list[0] = buf.slice(cpy);
5722 else
5723 list.shift();
5724
5725 c += cpy;
5726 }
5727 }
5728 }
5729
5730 return ret;
5731 }
5732
5733 function endReadable(stream) {
5734 var state = stream._readableState;
5735
5736 // If we get here before consuming all the bytes, then that is a
5737 // bug in node. Should never happen.
5738 if (state.length > 0)
5739 throw new Error('endReadable called on non-empty stream');
5740
5741 if (!state.endEmitted) {
5742 state.ended = true;
5743 process.nextTick(function() {
5744 // Check that we didn't get one last unshift.
5745 if (!state.endEmitted && state.length === 0) {
5746 state.endEmitted = true;
5747 stream.readable = false;
5748 stream.emit('end');
5749 }
5750 });
5751 }
5752 }
5753
5754 function forEach (xs, f) {
5755 for (var i = 0, l = xs.length; i < l; i++) {
5756 f(xs[i], i);
5757 }
5758 }
5759
5760 function indexOf (xs, x) {
5761 for (var i = 0, l = xs.length; i < l; i++) {
5762 if (xs[i] === x) return i;
5763 }
5764 return -1;
5765 }
5766
5767 }).call(this,require('_process'))
5768 },{"./_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){
5769 // Copyright Joyent, Inc. and other Node contributors.
5770 //
5771 // Permission is hereby granted, free of charge, to any person obtaining a
5772 // copy of this software and associated documentation files (the
5773 // "Software"), to deal in the Software without restriction, including
5774 // without limitation the rights to use, copy, modify, merge, publish,
5775 // distribute, sublicense, and/or sell copies of the Software, and to permit
5776 // persons to whom the Software is furnished to do so, subject to the
5777 // following conditions:
5778 //
5779 // The above copyright notice and this permission notice shall be included
5780 // in all copies or substantial portions of the Software.
5781 //
5782 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5783 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5784 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5785 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5786 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5787 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5788 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5789
5790
5791 // a transform stream is a readable/writable stream where you do
5792 // something with the data. Sometimes it's called a "filter",
5793 // but that's not a great name for it, since that implies a thing where
5794 // some bits pass through, and others are simply ignored. (That would
5795 // be a valid example of a transform, of course.)
5796 //
5797 // While the output is causally related to the input, it's not a
5798 // necessarily symmetric or synchronous transformation. For example,
5799 // a zlib stream might take multiple plain-text writes(), and then
5800 // emit a single compressed chunk some time in the future.
5801 //
5802 // Here's how this works:
5803 //
5804 // The Transform stream has all the aspects of the readable and writable
5805 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5806 // internally, and returns false if there's a lot of pending writes
5807 // buffered up. When you call read(), that calls _read(n) until
5808 // there's enough pending readable data buffered up.
5809 //
5810 // In a transform stream, the written data is placed in a buffer. When
5811 // _read(n) is called, it transforms the queued up data, calling the
5812 // buffered _write cb's as it consumes chunks. If consuming a single
5813 // written chunk would result in multiple output chunks, then the first
5814 // outputted bit calls the readcb, and subsequent chunks just go into
5815 // the read buffer, and will cause it to emit 'readable' if necessary.
5816 //
5817 // This way, back-pressure is actually determined by the reading side,
5818 // since _read has to be called to start processing a new chunk. However,
5819 // a pathological inflate type of transform can cause excessive buffering
5820 // here. For example, imagine a stream where every byte of input is
5821 // interpreted as an integer from 0-255, and then results in that many
5822 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5823 // 1kb of data being output. In this case, you could write a very small
5824 // amount of input, and end up with a very large amount of output. In
5825 // such a pathological inflating mechanism, there'd be no way to tell
5826 // the system to stop doing the transform. A single 4MB write could
5827 // cause the system to run out of memory.
5828 //
5829 // However, even in such a pathological case, only a single written chunk
5830 // would be consumed, and then the rest would wait (un-transformed) until
5831 // the results of the previous transformed chunk were consumed.
5832
5833 module.exports = Transform;
5834
5835 var Duplex = require('./_stream_duplex');
5836
5837 /*<replacement>*/
5838 var util = require('core-util-is');
5839 util.inherits = require('inherits');
5840 /*</replacement>*/
5841
5842 util.inherits(Transform, Duplex);
5843
5844
5845 function TransformState(options, stream) {
5846 this.afterTransform = function(er, data) {
5847 return afterTransform(stream, er, data);
5848 };
5849
5850 this.needTransform = false;
5851 this.transforming = false;
5852 this.writecb = null;
5853 this.writechunk = null;
5854 }
5855
5856 function afterTransform(stream, er, data) {
5857 var ts = stream._transformState;
5858 ts.transforming = false;
5859
5860 var cb = ts.writecb;
5861
5862 if (!cb)
5863 return stream.emit('error', new Error('no writecb in Transform class'));
5864
5865 ts.writechunk = null;
5866 ts.writecb = null;
5867
5868 if (!util.isNullOrUndefined(data))
5869 stream.push(data);
5870
5871 if (cb)
5872 cb(er);
5873
5874 var rs = stream._readableState;
5875 rs.reading = false;
5876 if (rs.needReadable || rs.length < rs.highWaterMark) {
5877 stream._read(rs.highWaterMark);
5878 }
5879 }
5880
5881
5882 function Transform(options) {
5883 if (!(this instanceof Transform))
5884 return new Transform(options);
5885
5886 Duplex.call(this, options);
5887
5888 this._transformState = new TransformState(options, this);
5889
5890 // when the writable side finishes, then flush out anything remaining.
5891 var stream = this;
5892
5893 // start out asking for a readable event once data is transformed.
5894 this._readableState.needReadable = true;
5895
5896 // we have implemented the _read method, and done the other things
5897 // that Readable wants before the first _read call, so unset the
5898 // sync guard flag.
5899 this._readableState.sync = false;
5900
5901 this.once('prefinish', function() {
5902 if (util.isFunction(this._flush))
5903 this._flush(function(er) {
5904 done(stream, er);
5905 });
5906 else
5907 done(stream);
5908 });
5909 }
5910
5911 Transform.prototype.push = function(chunk, encoding) {
5912 this._transformState.needTransform = false;
5913 return Duplex.prototype.push.call(this, chunk, encoding);
5914 };
5915
5916 // This is the part where you do stuff!
5917 // override this function in implementation classes.
5918 // 'chunk' is an input chunk.
5919 //
5920 // Call `push(newChunk)` to pass along transformed output
5921 // to the readable side. You may call 'push' zero or more times.
5922 //
5923 // Call `cb(err)` when you are done with this chunk. If you pass
5924 // an error, then that'll put the hurt on the whole operation. If you
5925 // never call cb(), then you'll never get another chunk.
5926 Transform.prototype._transform = function(chunk, encoding, cb) {
5927 throw new Error('not implemented');
5928 };
5929
5930 Transform.prototype._write = function(chunk, encoding, cb) {
5931 var ts = this._transformState;
5932 ts.writecb = cb;
5933 ts.writechunk = chunk;
5934 ts.writeencoding = encoding;
5935 if (!ts.transforming) {
5936 var rs = this._readableState;
5937 if (ts.needTransform ||
5938 rs.needReadable ||
5939 rs.length < rs.highWaterMark)
5940 this._read(rs.highWaterMark);
5941 }
5942 };
5943
5944 // Doesn't matter what the args are here.
5945 // _transform does all the work.
5946 // That we got here means that the readable side wants more data.
5947 Transform.prototype._read = function(n) {
5948 var ts = this._transformState;
5949
5950 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5951 ts.transforming = true;
5952 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5953 } else {
5954 // mark that we need a transform, so that any data that comes in
5955 // will get processed, now that we've asked for it.
5956 ts.needTransform = true;
5957 }
5958 };
5959
5960
5961 function done(stream, er) {
5962 if (er)
5963 return stream.emit('error', er);
5964
5965 // if there's nothing in the write buffer, then that means
5966 // that nothing more will ever be provided
5967 var ws = stream._writableState;
5968 var ts = stream._transformState;
5969
5970 if (ws.length)
5971 throw new Error('calling transform done when ws.length != 0');
5972
5973 if (ts.transforming)
5974 throw new Error('calling transform done when still transforming');
5975
5976 return stream.push(null);
5977 }
5978
5979 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5980 (function (process){
5981 // Copyright Joyent, Inc. and other Node contributors.
5982 //
5983 // Permission is hereby granted, free of charge, to any person obtaining a
5984 // copy of this software and associated documentation files (the
5985 // "Software"), to deal in the Software without restriction, including
5986 // without limitation the rights to use, copy, modify, merge, publish,
5987 // distribute, sublicense, and/or sell copies of the Software, and to permit
5988 // persons to whom the Software is furnished to do so, subject to the
5989 // following conditions:
5990 //
5991 // The above copyright notice and this permission notice shall be included
5992 // in all copies or substantial portions of the Software.
5993 //
5994 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5995 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5996 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5997 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5998 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5999 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6000 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6001
6002 // A bit simpler than readable streams.
6003 // Implement an async ._write(chunk, cb), and it'll handle all
6004 // the drain event emission and buffering.
6005
6006 module.exports = Writable;
6007
6008 /*<replacement>*/
6009 var Buffer = require('buffer').Buffer;
6010 /*</replacement>*/
6011
6012 Writable.WritableState = WritableState;
6013
6014
6015 /*<replacement>*/
6016 var util = require('core-util-is');
6017 util.inherits = require('inherits');
6018 /*</replacement>*/
6019
6020 var Stream = require('stream');
6021
6022 util.inherits(Writable, Stream);
6023
6024 function WriteReq(chunk, encoding, cb) {
6025 this.chunk = chunk;
6026 this.encoding = encoding;
6027 this.callback = cb;
6028 }
6029
6030 function WritableState(options, stream) {
6031 var Duplex = require('./_stream_duplex');
6032
6033 options = options || {};
6034
6035 // the point at which write() starts returning false
6036 // Note: 0 is a valid value, means that we always return false if
6037 // the entire buffer is not flushed immediately on write()
6038 var hwm = options.highWaterMark;
6039 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6040 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6041
6042 // object stream flag to indicate whether or not this stream
6043 // contains buffers or objects.
6044 this.objectMode = !!options.objectMode;
6045
6046 if (stream instanceof Duplex)
6047 this.objectMode = this.objectMode || !!options.writableObjectMode;
6048
6049 // cast to ints.
6050 this.highWaterMark = ~~this.highWaterMark;
6051
6052 this.needDrain = false;
6053 // at the start of calling end()
6054 this.ending = false;
6055 // when end() has been called, and returned
6056 this.ended = false;
6057 // when 'finish' is emitted
6058 this.finished = false;
6059
6060 // should we decode strings into buffers before passing to _write?
6061 // this is here so that some node-core streams can optimize string
6062 // handling at a lower level.
6063 var noDecode = options.decodeStrings === false;
6064 this.decodeStrings = !noDecode;
6065
6066 // Crypto is kind of old and crusty. Historically, its default string
6067 // encoding is 'binary' so we have to make this configurable.
6068 // Everything else in the universe uses 'utf8', though.
6069 this.defaultEncoding = options.defaultEncoding || 'utf8';
6070
6071 // not an actual buffer we keep track of, but a measurement
6072 // of how much we're waiting to get pushed to some underlying
6073 // socket or file.
6074 this.length = 0;
6075
6076 // a flag to see when we're in the middle of a write.
6077 this.writing = false;
6078
6079 // when true all writes will be buffered until .uncork() call
6080 this.corked = 0;
6081
6082 // a flag to be able to tell if the onwrite cb is called immediately,
6083 // or on a later tick. We set this to true at first, because any
6084 // actions that shouldn't happen until "later" should generally also
6085 // not happen before the first write call.
6086 this.sync = true;
6087
6088 // a flag to know if we're processing previously buffered items, which
6089 // may call the _write() callback in the same tick, so that we don't
6090 // end up in an overlapped onwrite situation.
6091 this.bufferProcessing = false;
6092
6093 // the callback that's passed to _write(chunk,cb)
6094 this.onwrite = function(er) {
6095 onwrite(stream, er);
6096 };
6097
6098 // the callback that the user supplies to write(chunk,encoding,cb)
6099 this.writecb = null;
6100
6101 // the amount that is being written when _write is called.
6102 this.writelen = 0;
6103
6104 this.buffer = [];
6105
6106 // number of pending user-supplied write callbacks
6107 // this must be 0 before 'finish' can be emitted
6108 this.pendingcb = 0;
6109
6110 // emit prefinish if the only thing we're waiting for is _write cbs
6111 // This is relevant for synchronous Transform streams
6112 this.prefinished = false;
6113
6114 // True if the error was already emitted and should not be thrown again
6115 this.errorEmitted = false;
6116 }
6117
6118 function Writable(options) {
6119 var Duplex = require('./_stream_duplex');
6120
6121 // Writable ctor is applied to Duplexes, though they're not
6122 // instanceof Writable, they're instanceof Readable.
6123 if (!(this instanceof Writable) && !(this instanceof Duplex))
6124 return new Writable(options);
6125
6126 this._writableState = new WritableState(options, this);
6127
6128 // legacy.
6129 this.writable = true;
6130
6131 Stream.call(this);
6132 }
6133
6134 // Otherwise people can pipe Writable streams, which is just wrong.
6135 Writable.prototype.pipe = function() {
6136 this.emit('error', new Error('Cannot pipe. Not readable.'));
6137 };
6138
6139
6140 function writeAfterEnd(stream, state, cb) {
6141 var er = new Error('write after end');
6142 // TODO: defer error events consistently everywhere, not just the cb
6143 stream.emit('error', er);
6144 process.nextTick(function() {
6145 cb(er);
6146 });
6147 }
6148
6149 // If we get something that is not a buffer, string, null, or undefined,
6150 // and we're not in objectMode, then that's an error.
6151 // Otherwise stream chunks are all considered to be of length=1, and the
6152 // watermarks determine how many objects to keep in the buffer, rather than
6153 // how many bytes or characters.
6154 function validChunk(stream, state, chunk, cb) {
6155 var valid = true;
6156 if (!util.isBuffer(chunk) &&
6157 !util.isString(chunk) &&
6158 !util.isNullOrUndefined(chunk) &&
6159 !state.objectMode) {
6160 var er = new TypeError('Invalid non-string/buffer chunk');
6161 stream.emit('error', er);
6162 process.nextTick(function() {
6163 cb(er);
6164 });
6165 valid = false;
6166 }
6167 return valid;
6168 }
6169
6170 Writable.prototype.write = function(chunk, encoding, cb) {
6171 var state = this._writableState;
6172 var ret = false;
6173
6174 if (util.isFunction(encoding)) {
6175 cb = encoding;
6176 encoding = null;
6177 }
6178
6179 if (util.isBuffer(chunk))
6180 encoding = 'buffer';
6181 else if (!encoding)
6182 encoding = state.defaultEncoding;
6183
6184 if (!util.isFunction(cb))
6185 cb = function() {};
6186
6187 if (state.ended)
6188 writeAfterEnd(this, state, cb);
6189 else if (validChunk(this, state, chunk, cb)) {
6190 state.pendingcb++;
6191 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6192 }
6193
6194 return ret;
6195 };
6196
6197 Writable.prototype.cork = function() {
6198 var state = this._writableState;
6199
6200 state.corked++;
6201 };
6202
6203 Writable.prototype.uncork = function() {
6204 var state = this._writableState;
6205
6206 if (state.corked) {
6207 state.corked--;
6208
6209 if (!state.writing &&
6210 !state.corked &&
6211 !state.finished &&
6212 !state.bufferProcessing &&
6213 state.buffer.length)
6214 clearBuffer(this, state);
6215 }
6216 };
6217
6218 function decodeChunk(state, chunk, encoding) {
6219 if (!state.objectMode &&
6220 state.decodeStrings !== false &&
6221 util.isString(chunk)) {
6222 chunk = new Buffer(chunk, encoding);
6223 }
6224 return chunk;
6225 }
6226
6227 // if we're already writing something, then just put this
6228 // in the queue, and wait our turn. Otherwise, call _write
6229 // If we return false, then we need a drain event, so set that flag.
6230 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6231 chunk = decodeChunk(state, chunk, encoding);
6232 if (util.isBuffer(chunk))
6233 encoding = 'buffer';
6234 var len = state.objectMode ? 1 : chunk.length;
6235
6236 state.length += len;
6237
6238 var ret = state.length < state.highWaterMark;
6239 // we must ensure that previous needDrain will not be reset to false.
6240 if (!ret)
6241 state.needDrain = true;
6242
6243 if (state.writing || state.corked)
6244 state.buffer.push(new WriteReq(chunk, encoding, cb));
6245 else
6246 doWrite(stream, state, false, len, chunk, encoding, cb);
6247
6248 return ret;
6249 }
6250
6251 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6252 state.writelen = len;
6253 state.writecb = cb;
6254 state.writing = true;
6255 state.sync = true;
6256 if (writev)
6257 stream._writev(chunk, state.onwrite);
6258 else
6259 stream._write(chunk, encoding, state.onwrite);
6260 state.sync = false;
6261 }
6262
6263 function onwriteError(stream, state, sync, er, cb) {
6264 if (sync)
6265 process.nextTick(function() {
6266 state.pendingcb--;
6267 cb(er);
6268 });
6269 else {
6270 state.pendingcb--;
6271 cb(er);
6272 }
6273
6274 stream._writableState.errorEmitted = true;
6275 stream.emit('error', er);
6276 }
6277
6278 function onwriteStateUpdate(state) {
6279 state.writing = false;
6280 state.writecb = null;
6281 state.length -= state.writelen;
6282 state.writelen = 0;
6283 }
6284
6285 function onwrite(stream, er) {
6286 var state = stream._writableState;
6287 var sync = state.sync;
6288 var cb = state.writecb;
6289
6290 onwriteStateUpdate(state);
6291
6292 if (er)
6293 onwriteError(stream, state, sync, er, cb);
6294 else {
6295 // Check if we're actually ready to finish, but don't emit yet
6296 var finished = needFinish(stream, state);
6297
6298 if (!finished &&
6299 !state.corked &&
6300 !state.bufferProcessing &&
6301 state.buffer.length) {
6302 clearBuffer(stream, state);
6303 }
6304
6305 if (sync) {
6306 process.nextTick(function() {
6307 afterWrite(stream, state, finished, cb);
6308 });
6309 } else {
6310 afterWrite(stream, state, finished, cb);
6311 }
6312 }
6313 }
6314
6315 function afterWrite(stream, state, finished, cb) {
6316 if (!finished)
6317 onwriteDrain(stream, state);
6318 state.pendingcb--;
6319 cb();
6320 finishMaybe(stream, state);
6321 }
6322
6323 // Must force callback to be called on nextTick, so that we don't
6324 // emit 'drain' before the write() consumer gets the 'false' return
6325 // value, and has a chance to attach a 'drain' listener.
6326 function onwriteDrain(stream, state) {
6327 if (state.length === 0 && state.needDrain) {
6328 state.needDrain = false;
6329 stream.emit('drain');
6330 }
6331 }
6332
6333
6334 // if there's something in the buffer waiting, then process it
6335 function clearBuffer(stream, state) {
6336 state.bufferProcessing = true;
6337
6338 if (stream._writev && state.buffer.length > 1) {
6339 // Fast case, write everything using _writev()
6340 var cbs = [];
6341 for (var c = 0; c < state.buffer.length; c++)
6342 cbs.push(state.buffer[c].callback);
6343
6344 // count the one we are adding, as well.
6345 // TODO(isaacs) clean this up
6346 state.pendingcb++;
6347 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6348 for (var i = 0; i < cbs.length; i++) {
6349 state.pendingcb--;
6350 cbs[i](err);
6351 }
6352 });
6353
6354 // Clear buffer
6355 state.buffer = [];
6356 } else {
6357 // Slow case, write chunks one-by-one
6358 for (var c = 0; c < state.buffer.length; c++) {
6359 var entry = state.buffer[c];
6360 var chunk = entry.chunk;
6361 var encoding = entry.encoding;
6362 var cb = entry.callback;
6363 var len = state.objectMode ? 1 : chunk.length;
6364
6365 doWrite(stream, state, false, len, chunk, encoding, cb);
6366
6367 // if we didn't call the onwrite immediately, then
6368 // it means that we need to wait until it does.
6369 // also, that means that the chunk and cb are currently
6370 // being processed, so move the buffer counter past them.
6371 if (state.writing) {
6372 c++;
6373 break;
6374 }
6375 }
6376
6377 if (c < state.buffer.length)
6378 state.buffer = state.buffer.slice(c);
6379 else
6380 state.buffer.length = 0;
6381 }
6382
6383 state.bufferProcessing = false;
6384 }
6385
6386 Writable.prototype._write = function(chunk, encoding, cb) {
6387 cb(new Error('not implemented'));
6388
6389 };
6390
6391 Writable.prototype._writev = null;
6392
6393 Writable.prototype.end = function(chunk, encoding, cb) {
6394 var state = this._writableState;
6395
6396 if (util.isFunction(chunk)) {
6397 cb = chunk;
6398 chunk = null;
6399 encoding = null;
6400 } else if (util.isFunction(encoding)) {
6401 cb = encoding;
6402 encoding = null;
6403 }
6404
6405 if (!util.isNullOrUndefined(chunk))
6406 this.write(chunk, encoding);
6407
6408 // .end() fully uncorks
6409 if (state.corked) {
6410 state.corked = 1;
6411 this.uncork();
6412 }
6413
6414 // ignore unnecessary end() calls.
6415 if (!state.ending && !state.finished)
6416 endWritable(this, state, cb);
6417 };
6418
6419
6420 function needFinish(stream, state) {
6421 return (state.ending &&
6422 state.length === 0 &&
6423 !state.finished &&
6424 !state.writing);
6425 }
6426
6427 function prefinish(stream, state) {
6428 if (!state.prefinished) {
6429 state.prefinished = true;
6430 stream.emit('prefinish');
6431 }
6432 }
6433
6434 function finishMaybe(stream, state) {
6435 var need = needFinish(stream, state);
6436 if (need) {
6437 if (state.pendingcb === 0) {
6438 prefinish(stream, state);
6439 state.finished = true;
6440 stream.emit('finish');
6441 } else
6442 prefinish(stream, state);
6443 }
6444 return need;
6445 }
6446
6447 function endWritable(stream, state, cb) {
6448 state.ending = true;
6449 finishMaybe(stream, state);
6450 if (cb) {
6451 if (state.finished)
6452 process.nextTick(cb);
6453 else
6454 stream.once('finish', cb);
6455 }
6456 state.ended = true;
6457 }
6458
6459 }).call(this,require('_process'))
6460 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6461 (function (Buffer){
6462 // Copyright Joyent, Inc. and other Node contributors.
6463 //
6464 // Permission is hereby granted, free of charge, to any person obtaining a
6465 // copy of this software and associated documentation files (the
6466 // "Software"), to deal in the Software without restriction, including
6467 // without limitation the rights to use, copy, modify, merge, publish,
6468 // distribute, sublicense, and/or sell copies of the Software, and to permit
6469 // persons to whom the Software is furnished to do so, subject to the
6470 // following conditions:
6471 //
6472 // The above copyright notice and this permission notice shall be included
6473 // in all copies or substantial portions of the Software.
6474 //
6475 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6476 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6477 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6478 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6479 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6480 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6481 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6482
6483 // NOTE: These type checking functions intentionally don't use `instanceof`
6484 // because it is fragile and can be easily faked with `Object.create()`.
6485 function isArray(ar) {
6486 return Array.isArray(ar);
6487 }
6488 exports.isArray = isArray;
6489
6490 function isBoolean(arg) {
6491 return typeof arg === 'boolean';
6492 }
6493 exports.isBoolean = isBoolean;
6494
6495 function isNull(arg) {
6496 return arg === null;
6497 }
6498 exports.isNull = isNull;
6499
6500 function isNullOrUndefined(arg) {
6501 return arg == null;
6502 }
6503 exports.isNullOrUndefined = isNullOrUndefined;
6504
6505 function isNumber(arg) {
6506 return typeof arg === 'number';
6507 }
6508 exports.isNumber = isNumber;
6509
6510 function isString(arg) {
6511 return typeof arg === 'string';
6512 }
6513 exports.isString = isString;
6514
6515 function isSymbol(arg) {
6516 return typeof arg === 'symbol';
6517 }
6518 exports.isSymbol = isSymbol;
6519
6520 function isUndefined(arg) {
6521 return arg === void 0;
6522 }
6523 exports.isUndefined = isUndefined;
6524
6525 function isRegExp(re) {
6526 return isObject(re) && objectToString(re) === '[object RegExp]';
6527 }
6528 exports.isRegExp = isRegExp;
6529
6530 function isObject(arg) {
6531 return typeof arg === 'object' && arg !== null;
6532 }
6533 exports.isObject = isObject;
6534
6535 function isDate(d) {
6536 return isObject(d) && objectToString(d) === '[object Date]';
6537 }
6538 exports.isDate = isDate;
6539
6540 function isError(e) {
6541 return isObject(e) &&
6542 (objectToString(e) === '[object Error]' || e instanceof Error);
6543 }
6544 exports.isError = isError;
6545
6546 function isFunction(arg) {
6547 return typeof arg === 'function';
6548 }
6549 exports.isFunction = isFunction;
6550
6551 function isPrimitive(arg) {
6552 return arg === null ||
6553 typeof arg === 'boolean' ||
6554 typeof arg === 'number' ||
6555 typeof arg === 'string' ||
6556 typeof arg === 'symbol' || // ES6 symbol
6557 typeof arg === 'undefined';
6558 }
6559 exports.isPrimitive = isPrimitive;
6560
6561 function isBuffer(arg) {
6562 return Buffer.isBuffer(arg);
6563 }
6564 exports.isBuffer = isBuffer;
6565
6566 function objectToString(o) {
6567 return Object.prototype.toString.call(o);
6568 }
6569 }).call(this,require("buffer").Buffer)
6570 },{"buffer":7}],22:[function(require,module,exports){
6571 module.exports = require("./lib/_stream_passthrough.js")
6572
6573 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6574 exports = module.exports = require('./lib/_stream_readable.js');
6575 exports.Stream = require('stream');
6576 exports.Readable = exports;
6577 exports.Writable = require('./lib/_stream_writable.js');
6578 exports.Duplex = require('./lib/_stream_duplex.js');
6579 exports.Transform = require('./lib/_stream_transform.js');
6580 exports.PassThrough = require('./lib/_stream_passthrough.js');
6581
6582 },{"./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){
6583 module.exports = require("./lib/_stream_transform.js")
6584
6585 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6586 module.exports = require("./lib/_stream_writable.js")
6587
6588 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6589 // Copyright Joyent, Inc. and other Node contributors.
6590 //
6591 // Permission is hereby granted, free of charge, to any person obtaining a
6592 // copy of this software and associated documentation files (the
6593 // "Software"), to deal in the Software without restriction, including
6594 // without limitation the rights to use, copy, modify, merge, publish,
6595 // distribute, sublicense, and/or sell copies of the Software, and to permit
6596 // persons to whom the Software is furnished to do so, subject to the
6597 // following conditions:
6598 //
6599 // The above copyright notice and this permission notice shall be included
6600 // in all copies or substantial portions of the Software.
6601 //
6602 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6603 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6604 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6605 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6606 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6607 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6608 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6609
6610 module.exports = Stream;
6611
6612 var EE = require('events').EventEmitter;
6613 var inherits = require('inherits');
6614
6615 inherits(Stream, EE);
6616 Stream.Readable = require('readable-stream/readable.js');
6617 Stream.Writable = require('readable-stream/writable.js');
6618 Stream.Duplex = require('readable-stream/duplex.js');
6619 Stream.Transform = require('readable-stream/transform.js');
6620 Stream.PassThrough = require('readable-stream/passthrough.js');
6621
6622 // Backwards-compat with node 0.4.x
6623 Stream.Stream = Stream;
6624
6625
6626
6627 // old-style streams. Note that the pipe method (the only relevant
6628 // part of this class) is overridden in the Readable class.
6629
6630 function Stream() {
6631 EE.call(this);
6632 }
6633
6634 Stream.prototype.pipe = function(dest, options) {
6635 var source = this;
6636
6637 function ondata(chunk) {
6638 if (dest.writable) {
6639 if (false === dest.write(chunk) && source.pause) {
6640 source.pause();
6641 }
6642 }
6643 }
6644
6645 source.on('data', ondata);
6646
6647 function ondrain() {
6648 if (source.readable && source.resume) {
6649 source.resume();
6650 }
6651 }
6652
6653 dest.on('drain', ondrain);
6654
6655 // If the 'end' option is not supplied, dest.end() will be called when
6656 // source gets the 'end' or 'close' events. Only dest.end() once.
6657 if (!dest._isStdio && (!options || options.end !== false)) {
6658 source.on('end', onend);
6659 source.on('close', onclose);
6660 }
6661
6662 var didOnEnd = false;
6663 function onend() {
6664 if (didOnEnd) return;
6665 didOnEnd = true;
6666
6667 dest.end();
6668 }
6669
6670
6671 function onclose() {
6672 if (didOnEnd) return;
6673 didOnEnd = true;
6674
6675 if (typeof dest.destroy === 'function') dest.destroy();
6676 }
6677
6678 // don't leave dangling pipes when there are errors.
6679 function onerror(er) {
6680 cleanup();
6681 if (EE.listenerCount(this, 'error') === 0) {
6682 throw er; // Unhandled stream error in pipe.
6683 }
6684 }
6685
6686 source.on('error', onerror);
6687 dest.on('error', onerror);
6688
6689 // remove all the event listeners that were added.
6690 function cleanup() {
6691 source.removeListener('data', ondata);
6692 dest.removeListener('drain', ondrain);
6693
6694 source.removeListener('end', onend);
6695 source.removeListener('close', onclose);
6696
6697 source.removeListener('error', onerror);
6698 dest.removeListener('error', onerror);
6699
6700 source.removeListener('end', cleanup);
6701 source.removeListener('close', cleanup);
6702
6703 dest.removeListener('close', cleanup);
6704 }
6705
6706 source.on('end', cleanup);
6707 source.on('close', cleanup);
6708
6709 dest.on('close', cleanup);
6710
6711 dest.emit('pipe', source);
6712
6713 // Allow for unix-like usage: A.pipe(B).pipe(C)
6714 return dest;
6715 };
6716
6717 },{"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){
6718 // Copyright Joyent, Inc. and other Node contributors.
6719 //
6720 // Permission is hereby granted, free of charge, to any person obtaining a
6721 // copy of this software and associated documentation files (the
6722 // "Software"), to deal in the Software without restriction, including
6723 // without limitation the rights to use, copy, modify, merge, publish,
6724 // distribute, sublicense, and/or sell copies of the Software, and to permit
6725 // persons to whom the Software is furnished to do so, subject to the
6726 // following conditions:
6727 //
6728 // The above copyright notice and this permission notice shall be included
6729 // in all copies or substantial portions of the Software.
6730 //
6731 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6732 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6733 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6734 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6735 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6736 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6737 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6738
6739 var Buffer = require('buffer').Buffer;
6740
6741 var isBufferEncoding = Buffer.isEncoding
6742 || function(encoding) {
6743 switch (encoding && encoding.toLowerCase()) {
6744 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;
6745 default: return false;
6746 }
6747 }
6748
6749
6750 function assertEncoding(encoding) {
6751 if (encoding && !isBufferEncoding(encoding)) {
6752 throw new Error('Unknown encoding: ' + encoding);
6753 }
6754 }
6755
6756 // StringDecoder provides an interface for efficiently splitting a series of
6757 // buffers into a series of JS strings without breaking apart multi-byte
6758 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6759 //
6760 // @TODO Handling all encodings inside a single object makes it very difficult
6761 // to reason about this code, so it should be split up in the future.
6762 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6763 // points as used by CESU-8.
6764 var StringDecoder = exports.StringDecoder = function(encoding) {
6765 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6766 assertEncoding(encoding);
6767 switch (this.encoding) {
6768 case 'utf8':
6769 // CESU-8 represents each of Surrogate Pair by 3-bytes
6770 this.surrogateSize = 3;
6771 break;
6772 case 'ucs2':
6773 case 'utf16le':
6774 // UTF-16 represents each of Surrogate Pair by 2-bytes
6775 this.surrogateSize = 2;
6776 this.detectIncompleteChar = utf16DetectIncompleteChar;
6777 break;
6778 case 'base64':
6779 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6780 this.surrogateSize = 3;
6781 this.detectIncompleteChar = base64DetectIncompleteChar;
6782 break;
6783 default:
6784 this.write = passThroughWrite;
6785 return;
6786 }
6787
6788 // Enough space to store all bytes of a single character. UTF-8 needs 4
6789 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6790 this.charBuffer = new Buffer(6);
6791 // Number of bytes received for the current incomplete multi-byte character.
6792 this.charReceived = 0;
6793 // Number of bytes expected for the current incomplete multi-byte character.
6794 this.charLength = 0;
6795 };
6796
6797
6798 // write decodes the given buffer and returns it as JS string that is
6799 // guaranteed to not contain any partial multi-byte characters. Any partial
6800 // character found at the end of the buffer is buffered up, and will be
6801 // returned when calling write again with the remaining bytes.
6802 //
6803 // Note: Converting a Buffer containing an orphan surrogate to a String
6804 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6805 // Buffer#write) will replace incomplete surrogates with the unicode
6806 // replacement character. See https://codereview.chromium.org/121173009/ .
6807 StringDecoder.prototype.write = function(buffer) {
6808 var charStr = '';
6809 // if our last write ended with an incomplete multibyte character
6810 while (this.charLength) {
6811 // determine how many remaining bytes this buffer has to offer for this char
6812 var available = (buffer.length >= this.charLength - this.charReceived) ?
6813 this.charLength - this.charReceived :
6814 buffer.length;
6815
6816 // add the new bytes to the char buffer
6817 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6818 this.charReceived += available;
6819
6820 if (this.charReceived < this.charLength) {
6821 // still not enough chars in this buffer? wait for more ...
6822 return '';
6823 }
6824
6825 // remove bytes belonging to the current character from the buffer
6826 buffer = buffer.slice(available, buffer.length);
6827
6828 // get the character that was split
6829 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6830
6831 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6832 var charCode = charStr.charCodeAt(charStr.length - 1);
6833 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6834 this.charLength += this.surrogateSize;
6835 charStr = '';
6836 continue;
6837 }
6838 this.charReceived = this.charLength = 0;
6839
6840 // if there are no more bytes in this buffer, just emit our char
6841 if (buffer.length === 0) {
6842 return charStr;
6843 }
6844 break;
6845 }
6846
6847 // determine and set charLength / charReceived
6848 this.detectIncompleteChar(buffer);
6849
6850 var end = buffer.length;
6851 if (this.charLength) {
6852 // buffer the incomplete character bytes we got
6853 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6854 end -= this.charReceived;
6855 }
6856
6857 charStr += buffer.toString(this.encoding, 0, end);
6858
6859 var end = charStr.length - 1;
6860 var charCode = charStr.charCodeAt(end);
6861 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6862 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6863 var size = this.surrogateSize;
6864 this.charLength += size;
6865 this.charReceived += size;
6866 this.charBuffer.copy(this.charBuffer, size, 0, size);
6867 buffer.copy(this.charBuffer, 0, 0, size);
6868 return charStr.substring(0, end);
6869 }
6870
6871 // or just emit the charStr
6872 return charStr;
6873 };
6874
6875 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
6876 // the end of the given buffer. If so, it sets this.charLength to the byte
6877 // length that character, and sets this.charReceived to the number of bytes
6878 // that are available for this character.
6879 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6880 // determine how many bytes we have to check at the end of this buffer
6881 var i = (buffer.length >= 3) ? 3 : buffer.length;
6882
6883 // Figure out if one of the last i bytes of our buffer announces an
6884 // incomplete char.
6885 for (; i > 0; i--) {
6886 var c = buffer[buffer.length - i];
6887
6888 // See http://en.wikipedia.org/wiki/UTF-8#Description
6889
6890 // 110XXXXX
6891 if (i == 1 && c >> 5 == 0x06) {
6892 this.charLength = 2;
6893 break;
6894 }
6895
6896 // 1110XXXX
6897 if (i <= 2 && c >> 4 == 0x0E) {
6898 this.charLength = 3;
6899 break;
6900 }
6901
6902 // 11110XXX
6903 if (i <= 3 && c >> 3 == 0x1E) {
6904 this.charLength = 4;
6905 break;
6906 }
6907 }
6908 this.charReceived = i;
6909 };
6910
6911 StringDecoder.prototype.end = function(buffer) {
6912 var res = '';
6913 if (buffer && buffer.length)
6914 res = this.write(buffer);
6915
6916 if (this.charReceived) {
6917 var cr = this.charReceived;
6918 var buf = this.charBuffer;
6919 var enc = this.encoding;
6920 res += buf.slice(0, cr).toString(enc);
6921 }
6922
6923 return res;
6924 };
6925
6926 function passThroughWrite(buffer) {
6927 return buffer.toString(this.encoding);
6928 }
6929
6930 function utf16DetectIncompleteChar(buffer) {
6931 this.charReceived = buffer.length % 2;
6932 this.charLength = this.charReceived ? 2 : 0;
6933 }
6934
6935 function base64DetectIncompleteChar(buffer) {
6936 this.charReceived = buffer.length % 3;
6937 this.charLength = this.charReceived ? 3 : 0;
6938 }
6939
6940 },{"buffer":7}],28:[function(require,module,exports){
6941 module.exports = function isBuffer(arg) {
6942 return arg && typeof arg === 'object'
6943 && typeof arg.copy === 'function'
6944 && typeof arg.fill === 'function'
6945 && typeof arg.readUInt8 === 'function';
6946 }
6947 },{}],29:[function(require,module,exports){
6948 (function (process,global){
6949 // Copyright Joyent, Inc. and other Node contributors.
6950 //
6951 // Permission is hereby granted, free of charge, to any person obtaining a
6952 // copy of this software and associated documentation files (the
6953 // "Software"), to deal in the Software without restriction, including
6954 // without limitation the rights to use, copy, modify, merge, publish,
6955 // distribute, sublicense, and/or sell copies of the Software, and to permit
6956 // persons to whom the Software is furnished to do so, subject to the
6957 // following conditions:
6958 //
6959 // The above copyright notice and this permission notice shall be included
6960 // in all copies or substantial portions of the Software.
6961 //
6962 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6963 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6964 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6965 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6966 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6967 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6968 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6969
6970 var formatRegExp = /%[sdj%]/g;
6971 exports.format = function(f) {
6972 if (!isString(f)) {
6973 var objects = [];
6974 for (var i = 0; i < arguments.length; i++) {
6975 objects.push(inspect(arguments[i]));
6976 }
6977 return objects.join(' ');
6978 }
6979
6980 var i = 1;
6981 var args = arguments;
6982 var len = args.length;
6983 var str = String(f).replace(formatRegExp, function(x) {
6984 if (x === '%%') return '%';
6985 if (i >= len) return x;
6986 switch (x) {
6987 case '%s': return String(args[i++]);
6988 case '%d': return Number(args[i++]);
6989 case '%j':
6990 try {
6991 return JSON.stringify(args[i++]);
6992 } catch (_) {
6993 return '[Circular]';
6994 }
6995 default:
6996 return x;
6997 }
6998 });
6999 for (var x = args[i]; i < len; x = args[++i]) {
7000 if (isNull(x) || !isObject(x)) {
7001 str += ' ' + x;
7002 } else {
7003 str += ' ' + inspect(x);
7004 }
7005 }
7006 return str;
7007 };
7008
7009
7010 // Mark that a method should not be used.
7011 // Returns a modified function which warns once by default.
7012 // If --no-deprecation is set, then it is a no-op.
7013 exports.deprecate = function(fn, msg) {
7014 // Allow for deprecating things in the process of starting up.
7015 if (isUndefined(global.process)) {
7016 return function() {
7017 return exports.deprecate(fn, msg).apply(this, arguments);
7018 };
7019 }
7020
7021 if (process.noDeprecation === true) {
7022 return fn;
7023 }
7024
7025 var warned = false;
7026 function deprecated() {
7027 if (!warned) {
7028 if (process.throwDeprecation) {
7029 throw new Error(msg);
7030 } else if (process.traceDeprecation) {
7031 console.trace(msg);
7032 } else {
7033 console.error(msg);
7034 }
7035 warned = true;
7036 }
7037 return fn.apply(this, arguments);
7038 }
7039
7040 return deprecated;
7041 };
7042
7043
7044 var debugs = {};
7045 var debugEnviron;
7046 exports.debuglog = function(set) {
7047 if (isUndefined(debugEnviron))
7048 debugEnviron = process.env.NODE_DEBUG || '';
7049 set = set.toUpperCase();
7050 if (!debugs[set]) {
7051 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7052 var pid = process.pid;
7053 debugs[set] = function() {
7054 var msg = exports.format.apply(exports, arguments);
7055 console.error('%s %d: %s', set, pid, msg);
7056 };
7057 } else {
7058 debugs[set] = function() {};
7059 }
7060 }
7061 return debugs[set];
7062 };
7063
7064
7065 /**
7066 * Echos the value of a value. Trys to print the value out
7067 * in the best way possible given the different types.
7068 *
7069 * @param {Object} obj The object to print out.
7070 * @param {Object} opts Optional options object that alters the output.
7071 */
7072 /* legacy: obj, showHidden, depth, colors*/
7073 function inspect(obj, opts) {
7074 // default options
7075 var ctx = {
7076 seen: [],
7077 stylize: stylizeNoColor
7078 };
7079 // legacy...
7080 if (arguments.length >= 3) ctx.depth = arguments[2];
7081 if (arguments.length >= 4) ctx.colors = arguments[3];
7082 if (isBoolean(opts)) {
7083 // legacy...
7084 ctx.showHidden = opts;
7085 } else if (opts) {
7086 // got an "options" object
7087 exports._extend(ctx, opts);
7088 }
7089 // set default options
7090 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7091 if (isUndefined(ctx.depth)) ctx.depth = 2;
7092 if (isUndefined(ctx.colors)) ctx.colors = false;
7093 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7094 if (ctx.colors) ctx.stylize = stylizeWithColor;
7095 return formatValue(ctx, obj, ctx.depth);
7096 }
7097 exports.inspect = inspect;
7098
7099
7100 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7101 inspect.colors = {
7102 'bold' : [1, 22],
7103 'italic' : [3, 23],
7104 'underline' : [4, 24],
7105 'inverse' : [7, 27],
7106 'white' : [37, 39],
7107 'grey' : [90, 39],
7108 'black' : [30, 39],
7109 'blue' : [34, 39],
7110 'cyan' : [36, 39],
7111 'green' : [32, 39],
7112 'magenta' : [35, 39],
7113 'red' : [31, 39],
7114 'yellow' : [33, 39]
7115 };
7116
7117 // Don't use 'blue' not visible on cmd.exe
7118 inspect.styles = {
7119 'special': 'cyan',
7120 'number': 'yellow',
7121 'boolean': 'yellow',
7122 'undefined': 'grey',
7123 'null': 'bold',
7124 'string': 'green',
7125 'date': 'magenta',
7126 // "name": intentionally not styling
7127 'regexp': 'red'
7128 };
7129
7130
7131 function stylizeWithColor(str, styleType) {
7132 var style = inspect.styles[styleType];
7133
7134 if (style) {
7135 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7136 '\u001b[' + inspect.colors[style][1] + 'm';
7137 } else {
7138 return str;
7139 }
7140 }
7141
7142
7143 function stylizeNoColor(str, styleType) {
7144 return str;
7145 }
7146
7147
7148 function arrayToHash(array) {
7149 var hash = {};
7150
7151 array.forEach(function(val, idx) {
7152 hash[val] = true;
7153 });
7154
7155 return hash;
7156 }
7157
7158
7159 function formatValue(ctx, value, recurseTimes) {
7160 // Provide a hook for user-specified inspect functions.
7161 // Check that value is an object with an inspect function on it
7162 if (ctx.customInspect &&
7163 value &&
7164 isFunction(value.inspect) &&
7165 // Filter out the util module, it's inspect function is special
7166 value.inspect !== exports.inspect &&
7167 // Also filter out any prototype objects using the circular check.
7168 !(value.constructor && value.constructor.prototype === value)) {
7169 var ret = value.inspect(recurseTimes, ctx);
7170 if (!isString(ret)) {
7171 ret = formatValue(ctx, ret, recurseTimes);
7172 }
7173 return ret;
7174 }
7175
7176 // Primitive types cannot have properties
7177 var primitive = formatPrimitive(ctx, value);
7178 if (primitive) {
7179 return primitive;
7180 }
7181
7182 // Look up the keys of the object.
7183 var keys = Object.keys(value);
7184 var visibleKeys = arrayToHash(keys);
7185
7186 if (ctx.showHidden) {
7187 keys = Object.getOwnPropertyNames(value);
7188 }
7189
7190 // IE doesn't make error fields non-enumerable
7191 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7192 if (isError(value)
7193 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7194 return formatError(value);
7195 }
7196
7197 // Some type of object without properties can be shortcutted.
7198 if (keys.length === 0) {
7199 if (isFunction(value)) {
7200 var name = value.name ? ': ' + value.name : '';
7201 return ctx.stylize('[Function' + name + ']', 'special');
7202 }
7203 if (isRegExp(value)) {
7204 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7205 }
7206 if (isDate(value)) {
7207 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7208 }
7209 if (isError(value)) {
7210 return formatError(value);
7211 }
7212 }
7213
7214 var base = '', array = false, braces = ['{', '}'];
7215
7216 // Make Array say that they are Array
7217 if (isArray(value)) {
7218 array = true;
7219 braces = ['[', ']'];
7220 }
7221
7222 // Make functions say that they are functions
7223 if (isFunction(value)) {
7224 var n = value.name ? ': ' + value.name : '';
7225 base = ' [Function' + n + ']';
7226 }
7227
7228 // Make RegExps say that they are RegExps
7229 if (isRegExp(value)) {
7230 base = ' ' + RegExp.prototype.toString.call(value);
7231 }
7232
7233 // Make dates with properties first say the date
7234 if (isDate(value)) {
7235 base = ' ' + Date.prototype.toUTCString.call(value);
7236 }
7237
7238 // Make error with message first say the error
7239 if (isError(value)) {
7240 base = ' ' + formatError(value);
7241 }
7242
7243 if (keys.length === 0 && (!array || value.length == 0)) {
7244 return braces[0] + base + braces[1];
7245 }
7246
7247 if (recurseTimes < 0) {
7248 if (isRegExp(value)) {
7249 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7250 } else {
7251 return ctx.stylize('[Object]', 'special');
7252 }
7253 }
7254
7255 ctx.seen.push(value);
7256
7257 var output;
7258 if (array) {
7259 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7260 } else {
7261 output = keys.map(function(key) {
7262 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7263 });
7264 }
7265
7266 ctx.seen.pop();
7267
7268 return reduceToSingleString(output, base, braces);
7269 }
7270
7271
7272 function formatPrimitive(ctx, value) {
7273 if (isUndefined(value))
7274 return ctx.stylize('undefined', 'undefined');
7275 if (isString(value)) {
7276 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7277 .replace(/'/g, "\\'")
7278 .replace(/\\"/g, '"') + '\'';
7279 return ctx.stylize(simple, 'string');
7280 }
7281 if (isNumber(value))
7282 return ctx.stylize('' + value, 'number');
7283 if (isBoolean(value))
7284 return ctx.stylize('' + value, 'boolean');
7285 // For some reason typeof null is "object", so special case here.
7286 if (isNull(value))
7287 return ctx.stylize('null', 'null');
7288 }
7289
7290
7291 function formatError(value) {
7292 return '[' + Error.prototype.toString.call(value) + ']';
7293 }
7294
7295
7296 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7297 var output = [];
7298 for (var i = 0, l = value.length; i < l; ++i) {
7299 if (hasOwnProperty(value, String(i))) {
7300 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7301 String(i), true));
7302 } else {
7303 output.push('');
7304 }
7305 }
7306 keys.forEach(function(key) {
7307 if (!key.match(/^\d+$/)) {
7308 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7309 key, true));
7310 }
7311 });
7312 return output;
7313 }
7314
7315
7316 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7317 var name, str, desc;
7318 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7319 if (desc.get) {
7320 if (desc.set) {
7321 str = ctx.stylize('[Getter/Setter]', 'special');
7322 } else {
7323 str = ctx.stylize('[Getter]', 'special');
7324 }
7325 } else {
7326 if (desc.set) {
7327 str = ctx.stylize('[Setter]', 'special');
7328 }
7329 }
7330 if (!hasOwnProperty(visibleKeys, key)) {
7331 name = '[' + key + ']';
7332 }
7333 if (!str) {
7334 if (ctx.seen.indexOf(desc.value) < 0) {
7335 if (isNull(recurseTimes)) {
7336 str = formatValue(ctx, desc.value, null);
7337 } else {
7338 str = formatValue(ctx, desc.value, recurseTimes - 1);
7339 }
7340 if (str.indexOf('\n') > -1) {
7341 if (array) {
7342 str = str.split('\n').map(function(line) {
7343 return ' ' + line;
7344 }).join('\n').substr(2);
7345 } else {
7346 str = '\n' + str.split('\n').map(function(line) {
7347 return ' ' + line;
7348 }).join('\n');
7349 }
7350 }
7351 } else {
7352 str = ctx.stylize('[Circular]', 'special');
7353 }
7354 }
7355 if (isUndefined(name)) {
7356 if (array && key.match(/^\d+$/)) {
7357 return str;
7358 }
7359 name = JSON.stringify('' + key);
7360 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7361 name = name.substr(1, name.length - 2);
7362 name = ctx.stylize(name, 'name');
7363 } else {
7364 name = name.replace(/'/g, "\\'")
7365 .replace(/\\"/g, '"')
7366 .replace(/(^"|"$)/g, "'");
7367 name = ctx.stylize(name, 'string');
7368 }
7369 }
7370
7371 return name + ': ' + str;
7372 }
7373
7374
7375 function reduceToSingleString(output, base, braces) {
7376 var numLinesEst = 0;
7377 var length = output.reduce(function(prev, cur) {
7378 numLinesEst++;
7379 if (cur.indexOf('\n') >= 0) numLinesEst++;
7380 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7381 }, 0);
7382
7383 if (length > 60) {
7384 return braces[0] +
7385 (base === '' ? '' : base + '\n ') +
7386 ' ' +
7387 output.join(',\n ') +
7388 ' ' +
7389 braces[1];
7390 }
7391
7392 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7393 }
7394
7395
7396 // NOTE: These type checking functions intentionally don't use `instanceof`
7397 // because it is fragile and can be easily faked with `Object.create()`.
7398 function isArray(ar) {
7399 return Array.isArray(ar);
7400 }
7401 exports.isArray = isArray;
7402
7403 function isBoolean(arg) {
7404 return typeof arg === 'boolean';
7405 }
7406 exports.isBoolean = isBoolean;
7407
7408 function isNull(arg) {
7409 return arg === null;
7410 }
7411 exports.isNull = isNull;
7412
7413 function isNullOrUndefined(arg) {
7414 return arg == null;
7415 }
7416 exports.isNullOrUndefined = isNullOrUndefined;
7417
7418 function isNumber(arg) {
7419 return typeof arg === 'number';
7420 }
7421 exports.isNumber = isNumber;
7422
7423 function isString(arg) {
7424 return typeof arg === 'string';
7425 }
7426 exports.isString = isString;
7427
7428 function isSymbol(arg) {
7429 return typeof arg === 'symbol';
7430 }
7431 exports.isSymbol = isSymbol;
7432
7433 function isUndefined(arg) {
7434 return arg === void 0;
7435 }
7436 exports.isUndefined = isUndefined;
7437
7438 function isRegExp(re) {
7439 return isObject(re) && objectToString(re) === '[object RegExp]';
7440 }
7441 exports.isRegExp = isRegExp;
7442
7443 function isObject(arg) {
7444 return typeof arg === 'object' && arg !== null;
7445 }
7446 exports.isObject = isObject;
7447
7448 function isDate(d) {
7449 return isObject(d) && objectToString(d) === '[object Date]';
7450 }
7451 exports.isDate = isDate;
7452
7453 function isError(e) {
7454 return isObject(e) &&
7455 (objectToString(e) === '[object Error]' || e instanceof Error);
7456 }
7457 exports.isError = isError;
7458
7459 function isFunction(arg) {
7460 return typeof arg === 'function';
7461 }
7462 exports.isFunction = isFunction;
7463
7464 function isPrimitive(arg) {
7465 return arg === null ||
7466 typeof arg === 'boolean' ||
7467 typeof arg === 'number' ||
7468 typeof arg === 'string' ||
7469 typeof arg === 'symbol' || // ES6 symbol
7470 typeof arg === 'undefined';
7471 }
7472 exports.isPrimitive = isPrimitive;
7473
7474 exports.isBuffer = require('./support/isBuffer');
7475
7476 function objectToString(o) {
7477 return Object.prototype.toString.call(o);
7478 }
7479
7480
7481 function pad(n) {
7482 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7483 }
7484
7485
7486 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7487 'Oct', 'Nov', 'Dec'];
7488
7489 // 26 Feb 16:19:34
7490 function timestamp() {
7491 var d = new Date();
7492 var time = [pad(d.getHours()),
7493 pad(d.getMinutes()),
7494 pad(d.getSeconds())].join(':');
7495 return [d.getDate(), months[d.getMonth()], time].join(' ');
7496 }
7497
7498
7499 // log is just a thin wrapper to console.log that prepends a timestamp
7500 exports.log = function() {
7501 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7502 };
7503
7504
7505 /**
7506 * Inherit the prototype methods from one constructor into another.
7507 *
7508 * The Function.prototype.inherits from lang.js rewritten as a standalone
7509 * function (not on Function.prototype). NOTE: If this file is to be loaded
7510 * during bootstrapping this function needs to be rewritten using some native
7511 * functions as prototype setup using normal JavaScript does not work as
7512 * expected during bootstrapping (see mirror.js in r114903).
7513 *
7514 * @param {function} ctor Constructor function which needs to inherit the
7515 * prototype.
7516 * @param {function} superCtor Constructor function to inherit prototype from.
7517 */
7518 exports.inherits = require('inherits');
7519
7520 exports._extend = function(origin, add) {
7521 // Don't do anything if add isn't an object
7522 if (!add || !isObject(add)) return origin;
7523
7524 var keys = Object.keys(add);
7525 var i = keys.length;
7526 while (i--) {
7527 origin[keys[i]] = add[keys[i]];
7528 }
7529 return origin;
7530 };
7531
7532 function hasOwnProperty(obj, prop) {
7533 return Object.prototype.hasOwnProperty.call(obj, prop);
7534 }
7535
7536 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7537 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7538 // Base58 encoding/decoding
7539 // Originally written by Mike Hearn for BitcoinJ
7540 // Copyright (c) 2011 Google Inc
7541 // Ported to JavaScript by Stefan Thomas
7542 // Merged Buffer refactorings from base58-native by Stephen Pair
7543 // Copyright (c) 2013 BitPay Inc
7544
7545 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7546 var ALPHABET_MAP = {}
7547 for(var i = 0; i < ALPHABET.length; i++) {
7548 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7549 }
7550 var BASE = 58
7551
7552 function encode(buffer) {
7553 if (buffer.length === 0) return ''
7554
7555 var i, j, digits = [0]
7556 for (i = 0; i < buffer.length; i++) {
7557 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7558
7559 digits[0] += buffer[i]
7560
7561 var carry = 0
7562 for (j = 0; j < digits.length; ++j) {
7563 digits[j] += carry
7564
7565 carry = (digits[j] / BASE) | 0
7566 digits[j] %= BASE
7567 }
7568
7569 while (carry) {
7570 digits.push(carry % BASE)
7571
7572 carry = (carry / BASE) | 0
7573 }
7574 }
7575
7576 // deal with leading zeros
7577 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7578
7579 // convert digits to a string
7580 var stringOutput = ""
7581 for (var i = digits.length - 1; i >= 0; i--) {
7582 stringOutput = stringOutput + ALPHABET[digits[i]]
7583 }
7584 return stringOutput
7585 }
7586
7587 function decode(string) {
7588 if (string.length === 0) return []
7589
7590 var i, j, bytes = [0]
7591 for (i = 0; i < string.length; i++) {
7592 var c = string[i]
7593 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7594
7595 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7596 bytes[0] += ALPHABET_MAP[c]
7597
7598 var carry = 0
7599 for (j = 0; j < bytes.length; ++j) {
7600 bytes[j] += carry
7601
7602 carry = bytes[j] >> 8
7603 bytes[j] &= 0xff
7604 }
7605
7606 while (carry) {
7607 bytes.push(carry & 0xff)
7608
7609 carry >>= 8
7610 }
7611 }
7612
7613 // deal with leading zeros
7614 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7615
7616 return bytes.reverse()
7617 }
7618
7619 module.exports = {
7620 encode: encode,
7621 decode: decode
7622 }
7623
7624 },{}],31:[function(require,module,exports){
7625 (function (Buffer){
7626 'use strict'
7627
7628 var base58 = require('bs58')
7629 var createHash = require('create-hash')
7630
7631 // SHA256(SHA256(buffer))
7632 function sha256x2 (buffer) {
7633 buffer = createHash('sha256').update(buffer).digest()
7634 return createHash('sha256').update(buffer).digest()
7635 }
7636
7637 // Encode a buffer as a base58-check encoded string
7638 function encode (payload) {
7639 var checksum = sha256x2(payload).slice(0, 4)
7640
7641 return base58.encode(Buffer.concat([
7642 payload,
7643 checksum
7644 ]))
7645 }
7646
7647 // Decode a base58-check encoded string to a buffer
7648 function decode (string) {
7649 var buffer = new Buffer(base58.decode(string))
7650
7651 var payload = buffer.slice(0, -4)
7652 var checksum = buffer.slice(-4)
7653 var newChecksum = sha256x2(payload).slice(0, 4)
7654
7655 for (var i = 0; i < newChecksum.length; ++i) {
7656 if (newChecksum[i] === checksum[i]) continue
7657
7658 throw new Error('Invalid checksum')
7659 }
7660
7661 return payload
7662 }
7663
7664 module.exports = {
7665 encode: encode,
7666 decode: decode
7667 }
7668
7669 }).call(this,require("buffer").Buffer)
7670 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7671 (function (Buffer){
7672 'use strict';
7673 var inherits = require('inherits')
7674 var md5 = require('./md5')
7675 var rmd160 = require('ripemd160')
7676 var sha = require('sha.js')
7677
7678 var Transform = require('stream').Transform
7679
7680 function HashNoConstructor(hash) {
7681 Transform.call(this)
7682
7683 this._hash = hash
7684 this.buffers = []
7685 }
7686
7687 inherits(HashNoConstructor, Transform)
7688
7689 HashNoConstructor.prototype._transform = function (data, _, next) {
7690 this.buffers.push(data)
7691
7692 next()
7693 }
7694
7695 HashNoConstructor.prototype._flush = function (next) {
7696 this.push(this.digest())
7697 next()
7698 }
7699
7700 HashNoConstructor.prototype.update = function (data, enc) {
7701 if (typeof data === 'string') {
7702 data = new Buffer(data, enc)
7703 }
7704
7705 this.buffers.push(data)
7706 return this
7707 }
7708
7709 HashNoConstructor.prototype.digest = function (enc) {
7710 var buf = Buffer.concat(this.buffers)
7711 var r = this._hash(buf)
7712 this.buffers = null
7713
7714 return enc ? r.toString(enc) : r
7715 }
7716
7717 function Hash(hash) {
7718 Transform.call(this)
7719
7720 this._hash = hash
7721 }
7722
7723 inherits(Hash, Transform)
7724
7725 Hash.prototype._transform = function (data, enc, next) {
7726 if (enc) data = new Buffer(data, enc)
7727
7728 this._hash.update(data)
7729
7730 next()
7731 }
7732
7733 Hash.prototype._flush = function (next) {
7734 this.push(this._hash.digest())
7735 this._hash = null
7736
7737 next()
7738 }
7739
7740 Hash.prototype.update = function (data, enc) {
7741 if (typeof data === 'string') {
7742 data = new Buffer(data, enc)
7743 }
7744
7745 this._hash.update(data)
7746 return this
7747 }
7748
7749 Hash.prototype.digest = function (enc) {
7750 var outData = this._hash.digest()
7751
7752 return enc ? outData.toString(enc) : outData
7753 }
7754
7755 module.exports = function createHash (alg) {
7756 if ('md5' === alg) return new HashNoConstructor(md5)
7757 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7758
7759 return new Hash(sha(alg))
7760 }
7761
7762 }).call(this,require("buffer").Buffer)
7763 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
7764 (function (Buffer){
7765 'use strict';
7766 var intSize = 4;
7767 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7768 var chrsz = 8;
7769
7770 function toArray(buf, bigEndian) {
7771 if ((buf.length % intSize) !== 0) {
7772 var len = buf.length + (intSize - (buf.length % intSize));
7773 buf = Buffer.concat([buf, zeroBuffer], len);
7774 }
7775
7776 var arr = [];
7777 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7778 for (var i = 0; i < buf.length; i += intSize) {
7779 arr.push(fn.call(buf, i));
7780 }
7781 return arr;
7782 }
7783
7784 function toBuffer(arr, size, bigEndian) {
7785 var buf = new Buffer(size);
7786 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7787 for (var i = 0; i < arr.length; i++) {
7788 fn.call(buf, arr[i], i * 4, true);
7789 }
7790 return buf;
7791 }
7792
7793 function hash(buf, fn, hashSize, bigEndian) {
7794 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7795 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7796 return toBuffer(arr, hashSize, bigEndian);
7797 }
7798 exports.hash = hash;
7799 }).call(this,require("buffer").Buffer)
7800 },{"buffer":7}],34:[function(require,module,exports){
7801 'use strict';
7802 /*
7803 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7804 * Digest Algorithm, as defined in RFC 1321.
7805 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7806 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7807 * Distributed under the BSD License
7808 * See http://pajhome.org.uk/crypt/md5 for more info.
7809 */
7810
7811 var helpers = require('./helpers');
7812
7813 /*
7814 * Calculate the MD5 of an array of little-endian words, and a bit length
7815 */
7816 function core_md5(x, len)
7817 {
7818 /* append padding */
7819 x[len >> 5] |= 0x80 << ((len) % 32);
7820 x[(((len + 64) >>> 9) << 4) + 14] = len;
7821
7822 var a = 1732584193;
7823 var b = -271733879;
7824 var c = -1732584194;
7825 var d = 271733878;
7826
7827 for(var i = 0; i < x.length; i += 16)
7828 {
7829 var olda = a;
7830 var oldb = b;
7831 var oldc = c;
7832 var oldd = d;
7833
7834 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7835 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7836 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7837 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7838 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7839 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7840 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7841 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7842 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7843 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7844 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7845 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7846 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7847 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7848 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7849 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7850
7851 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7852 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7853 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7854 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7855 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7856 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7857 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7858 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7859 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7860 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7861 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7862 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7863 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7864 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7865 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7866 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7867
7868 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7869 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7870 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7871 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7872 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7873 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7874 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7875 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7876 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7877 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7878 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7879 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7880 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7881 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7882 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7883 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7884
7885 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7886 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7887 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7888 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7889 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7890 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7891 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7892 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7893 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7894 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7895 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7896 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7897 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7898 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7899 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7900 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7901
7902 a = safe_add(a, olda);
7903 b = safe_add(b, oldb);
7904 c = safe_add(c, oldc);
7905 d = safe_add(d, oldd);
7906 }
7907 return Array(a, b, c, d);
7908
7909 }
7910
7911 /*
7912 * These functions implement the four basic operations the algorithm uses.
7913 */
7914 function md5_cmn(q, a, b, x, s, t)
7915 {
7916 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7917 }
7918 function md5_ff(a, b, c, d, x, s, t)
7919 {
7920 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7921 }
7922 function md5_gg(a, b, c, d, x, s, t)
7923 {
7924 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7925 }
7926 function md5_hh(a, b, c, d, x, s, t)
7927 {
7928 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7929 }
7930 function md5_ii(a, b, c, d, x, s, t)
7931 {
7932 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7933 }
7934
7935 /*
7936 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7937 * to work around bugs in some JS interpreters.
7938 */
7939 function safe_add(x, y)
7940 {
7941 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7942 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7943 return (msw << 16) | (lsw & 0xFFFF);
7944 }
7945
7946 /*
7947 * Bitwise rotate a 32-bit number to the left.
7948 */
7949 function bit_rol(num, cnt)
7950 {
7951 return (num << cnt) | (num >>> (32 - cnt));
7952 }
7953
7954 module.exports = function md5(buf) {
7955 return helpers.hash(buf, core_md5, 16);
7956 };
7957 },{"./helpers":33}],35:[function(require,module,exports){
7958 arguments[4][12][0].apply(exports,arguments)
7959 },{"dup":12}],36:[function(require,module,exports){
7960 (function (Buffer){
7961 /*
7962 CryptoJS v3.1.2
7963 code.google.com/p/crypto-js
7964 (c) 2009-2013 by Jeff Mott. All rights reserved.
7965 code.google.com/p/crypto-js/wiki/License
7966 */
7967 /** @preserve
7968 (c) 2012 by Cédric Mesnil. All rights reserved.
7969
7970 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7971
7972 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7973 - 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.
7974
7975 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.
7976 */
7977
7978 // constants table
7979 var zl = [
7980 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7981 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7982 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7983 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7984 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7985 ]
7986
7987 var zr = [
7988 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7989 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7990 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7991 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7992 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7993 ]
7994
7995 var sl = [
7996 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7997 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
7998 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
7999 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8000 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8001 ]
8002
8003 var sr = [
8004 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8005 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8006 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8007 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8008 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8009 ]
8010
8011 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8012 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8013
8014 function bytesToWords (bytes) {
8015 var words = []
8016 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8017 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8018 }
8019 return words
8020 }
8021
8022 function wordsToBytes (words) {
8023 var bytes = []
8024 for (var b = 0; b < words.length * 32; b += 8) {
8025 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8026 }
8027 return bytes
8028 }
8029
8030 function processBlock (H, M, offset) {
8031 // swap endian
8032 for (var i = 0; i < 16; i++) {
8033 var offset_i = offset + i
8034 var M_offset_i = M[offset_i]
8035
8036 // Swap
8037 M[offset_i] = (
8038 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8039 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8040 )
8041 }
8042
8043 // Working variables
8044 var al, bl, cl, dl, el
8045 var ar, br, cr, dr, er
8046
8047 ar = al = H[0]
8048 br = bl = H[1]
8049 cr = cl = H[2]
8050 dr = dl = H[3]
8051 er = el = H[4]
8052
8053 // computation
8054 var t
8055 for (i = 0; i < 80; i += 1) {
8056 t = (al + M[offset + zl[i]]) | 0
8057 if (i < 16) {
8058 t += f1(bl, cl, dl) + hl[0]
8059 } else if (i < 32) {
8060 t += f2(bl, cl, dl) + hl[1]
8061 } else if (i < 48) {
8062 t += f3(bl, cl, dl) + hl[2]
8063 } else if (i < 64) {
8064 t += f4(bl, cl, dl) + hl[3]
8065 } else {// if (i<80) {
8066 t += f5(bl, cl, dl) + hl[4]
8067 }
8068 t = t | 0
8069 t = rotl(t, sl[i])
8070 t = (t + el) | 0
8071 al = el
8072 el = dl
8073 dl = rotl(cl, 10)
8074 cl = bl
8075 bl = t
8076
8077 t = (ar + M[offset + zr[i]]) | 0
8078 if (i < 16) {
8079 t += f5(br, cr, dr) + hr[0]
8080 } else if (i < 32) {
8081 t += f4(br, cr, dr) + hr[1]
8082 } else if (i < 48) {
8083 t += f3(br, cr, dr) + hr[2]
8084 } else if (i < 64) {
8085 t += f2(br, cr, dr) + hr[3]
8086 } else {// if (i<80) {
8087 t += f1(br, cr, dr) + hr[4]
8088 }
8089
8090 t = t | 0
8091 t = rotl(t, sr[i])
8092 t = (t + er) | 0
8093 ar = er
8094 er = dr
8095 dr = rotl(cr, 10)
8096 cr = br
8097 br = t
8098 }
8099
8100 // intermediate hash value
8101 t = (H[1] + cl + dr) | 0
8102 H[1] = (H[2] + dl + er) | 0
8103 H[2] = (H[3] + el + ar) | 0
8104 H[3] = (H[4] + al + br) | 0
8105 H[4] = (H[0] + bl + cr) | 0
8106 H[0] = t
8107 }
8108
8109 function f1 (x, y, z) {
8110 return ((x) ^ (y) ^ (z))
8111 }
8112
8113 function f2 (x, y, z) {
8114 return (((x) & (y)) | ((~x) & (z)))
8115 }
8116
8117 function f3 (x, y, z) {
8118 return (((x) | (~(y))) ^ (z))
8119 }
8120
8121 function f4 (x, y, z) {
8122 return (((x) & (z)) | ((y) & (~(z))))
8123 }
8124
8125 function f5 (x, y, z) {
8126 return ((x) ^ ((y) | (~(z))))
8127 }
8128
8129 function rotl (x, n) {
8130 return (x << n) | (x >>> (32 - n))
8131 }
8132
8133 function ripemd160 (message) {
8134 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8135
8136 if (typeof message === 'string') {
8137 message = new Buffer(message, 'utf8')
8138 }
8139
8140 var m = bytesToWords(message)
8141
8142 var nBitsLeft = message.length * 8
8143 var nBitsTotal = message.length * 8
8144
8145 // Add padding
8146 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8147 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8148 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8149 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8150 )
8151
8152 for (var i = 0; i < m.length; i += 16) {
8153 processBlock(H, m, i)
8154 }
8155
8156 // swap endian
8157 for (i = 0; i < 5; i++) {
8158 // shortcut
8159 var H_i = H[i]
8160
8161 // Swap
8162 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8163 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8164 }
8165
8166 var digestbytes = wordsToBytes(H)
8167 return new Buffer(digestbytes)
8168 }
8169
8170 module.exports = ripemd160
8171
8172 }).call(this,require("buffer").Buffer)
8173 },{"buffer":7}],37:[function(require,module,exports){
8174 (function (Buffer){
8175 // prototype class for hash functions
8176 function Hash (blockSize, finalSize) {
8177 this._block = new Buffer(blockSize)
8178 this._finalSize = finalSize
8179 this._blockSize = blockSize
8180 this._len = 0
8181 this._s = 0
8182 }
8183
8184 Hash.prototype.update = function (data, enc) {
8185 if (typeof data === 'string') {
8186 enc = enc || 'utf8'
8187 data = new Buffer(data, enc)
8188 }
8189
8190 var l = this._len += data.length
8191 var s = this._s || 0
8192 var f = 0
8193 var buffer = this._block
8194
8195 while (s < l) {
8196 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8197 var ch = (t - f)
8198
8199 for (var i = 0; i < ch; i++) {
8200 buffer[(s % this._blockSize) + i] = data[i + f]
8201 }
8202
8203 s += ch
8204 f += ch
8205
8206 if ((s % this._blockSize) === 0) {
8207 this._update(buffer)
8208 }
8209 }
8210 this._s = s
8211
8212 return this
8213 }
8214
8215 Hash.prototype.digest = function (enc) {
8216 // Suppose the length of the message M, in bits, is l
8217 var l = this._len * 8
8218
8219 // Append the bit 1 to the end of the message
8220 this._block[this._len % this._blockSize] = 0x80
8221
8222 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8223 this._block.fill(0, this._len % this._blockSize + 1)
8224
8225 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8226 this._update(this._block)
8227 this._block.fill(0)
8228 }
8229
8230 // to this append the block which is equal to the number l written in binary
8231 // TODO: handle case where l is > Math.pow(2, 29)
8232 this._block.writeInt32BE(l, this._blockSize - 4)
8233
8234 var hash = this._update(this._block) || this._hash()
8235
8236 return enc ? hash.toString(enc) : hash
8237 }
8238
8239 Hash.prototype._update = function () {
8240 throw new Error('_update must be implemented by subclass')
8241 }
8242
8243 module.exports = Hash
8244
8245 }).call(this,require("buffer").Buffer)
8246 },{"buffer":7}],38:[function(require,module,exports){
8247 var exports = module.exports = function SHA (algorithm) {
8248 algorithm = algorithm.toLowerCase()
8249
8250 var Algorithm = exports[algorithm]
8251 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8252
8253 return new Algorithm()
8254 }
8255
8256 exports.sha = require('./sha')
8257 exports.sha1 = require('./sha1')
8258 exports.sha224 = require('./sha224')
8259 exports.sha256 = require('./sha256')
8260 exports.sha384 = require('./sha384')
8261 exports.sha512 = require('./sha512')
8262
8263 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8264 (function (Buffer){
8265 /*
8266 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8267 * in FIPS PUB 180-1
8268 * This source code is derived from sha1.js of the same repository.
8269 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8270 * operation was added.
8271 */
8272
8273 var inherits = require('inherits')
8274 var Hash = require('./hash')
8275
8276 var W = new Array(80)
8277
8278 function Sha () {
8279 this.init()
8280 this._w = W
8281
8282 Hash.call(this, 64, 56)
8283 }
8284
8285 inherits(Sha, Hash)
8286
8287 Sha.prototype.init = function () {
8288 this._a = 0x67452301 | 0
8289 this._b = 0xefcdab89 | 0
8290 this._c = 0x98badcfe | 0
8291 this._d = 0x10325476 | 0
8292 this._e = 0xc3d2e1f0 | 0
8293
8294 return this
8295 }
8296
8297 /*
8298 * Bitwise rotate a 32-bit number to the left.
8299 */
8300 function rol (num, cnt) {
8301 return (num << cnt) | (num >>> (32 - cnt))
8302 }
8303
8304 Sha.prototype._update = function (M) {
8305 var W = this._w
8306
8307 var a = this._a
8308 var b = this._b
8309 var c = this._c
8310 var d = this._d
8311 var e = this._e
8312
8313 var j = 0, k
8314
8315 /*
8316 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8317 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8318 */
8319 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8320 function loop (w, f) {
8321 W[j] = w
8322
8323 var t = rol(a, 5) + f + e + w + k
8324
8325 e = d
8326 d = c
8327 c = rol(b, 30)
8328 b = a
8329 a = t
8330 j++
8331 }
8332
8333 k = 1518500249
8334 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8335 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8336 k = 1859775393
8337 while (j < 40) loop(calcW(), b ^ c ^ d)
8338 k = -1894007588
8339 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8340 k = -899497514
8341 while (j < 80) loop(calcW(), b ^ c ^ d)
8342
8343 this._a = (a + this._a) | 0
8344 this._b = (b + this._b) | 0
8345 this._c = (c + this._c) | 0
8346 this._d = (d + this._d) | 0
8347 this._e = (e + this._e) | 0
8348 }
8349
8350 Sha.prototype._hash = function () {
8351 var H = new Buffer(20)
8352
8353 H.writeInt32BE(this._a | 0, 0)
8354 H.writeInt32BE(this._b | 0, 4)
8355 H.writeInt32BE(this._c | 0, 8)
8356 H.writeInt32BE(this._d | 0, 12)
8357 H.writeInt32BE(this._e | 0, 16)
8358
8359 return H
8360 }
8361
8362 module.exports = Sha
8363
8364
8365 }).call(this,require("buffer").Buffer)
8366 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8367 (function (Buffer){
8368 /*
8369 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8370 * in FIPS PUB 180-1
8371 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8372 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8373 * Distributed under the BSD License
8374 * See http://pajhome.org.uk/crypt/md5 for details.
8375 */
8376
8377 var inherits = require('inherits')
8378 var Hash = require('./hash')
8379
8380 var W = new Array(80)
8381
8382 function Sha1 () {
8383 this.init()
8384 this._w = W
8385
8386 Hash.call(this, 64, 56)
8387 }
8388
8389 inherits(Sha1, Hash)
8390
8391 Sha1.prototype.init = function () {
8392 this._a = 0x67452301 | 0
8393 this._b = 0xefcdab89 | 0
8394 this._c = 0x98badcfe | 0
8395 this._d = 0x10325476 | 0
8396 this._e = 0xc3d2e1f0 | 0
8397
8398 return this
8399 }
8400
8401 /*
8402 * Bitwise rotate a 32-bit number to the left.
8403 */
8404 function rol (num, cnt) {
8405 return (num << cnt) | (num >>> (32 - cnt))
8406 }
8407
8408 Sha1.prototype._update = function (M) {
8409 var W = this._w
8410
8411 var a = this._a
8412 var b = this._b
8413 var c = this._c
8414 var d = this._d
8415 var e = this._e
8416
8417 var j = 0, k
8418
8419 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8420 function loop (w, f) {
8421 W[j] = w
8422
8423 var t = rol(a, 5) + f + e + w + k
8424
8425 e = d
8426 d = c
8427 c = rol(b, 30)
8428 b = a
8429 a = t
8430 j++
8431 }
8432
8433 k = 1518500249
8434 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8435 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8436 k = 1859775393
8437 while (j < 40) loop(calcW(), b ^ c ^ d)
8438 k = -1894007588
8439 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8440 k = -899497514
8441 while (j < 80) loop(calcW(), b ^ c ^ d)
8442
8443 this._a = (a + this._a) | 0
8444 this._b = (b + this._b) | 0
8445 this._c = (c + this._c) | 0
8446 this._d = (d + this._d) | 0
8447 this._e = (e + this._e) | 0
8448 }
8449
8450 Sha1.prototype._hash = function () {
8451 var H = new Buffer(20)
8452
8453 H.writeInt32BE(this._a | 0, 0)
8454 H.writeInt32BE(this._b | 0, 4)
8455 H.writeInt32BE(this._c | 0, 8)
8456 H.writeInt32BE(this._d | 0, 12)
8457 H.writeInt32BE(this._e | 0, 16)
8458
8459 return H
8460 }
8461
8462 module.exports = Sha1
8463
8464 }).call(this,require("buffer").Buffer)
8465 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8466 (function (Buffer){
8467 /**
8468 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8469 * in FIPS 180-2
8470 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8471 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8472 *
8473 */
8474
8475 var inherits = require('inherits')
8476 var Sha256 = require('./sha256')
8477 var Hash = require('./hash')
8478
8479 var W = new Array(64)
8480
8481 function Sha224 () {
8482 this.init()
8483
8484 this._w = W // new Array(64)
8485
8486 Hash.call(this, 64, 56)
8487 }
8488
8489 inherits(Sha224, Sha256)
8490
8491 Sha224.prototype.init = function () {
8492 this._a = 0xc1059ed8 | 0
8493 this._b = 0x367cd507 | 0
8494 this._c = 0x3070dd17 | 0
8495 this._d = 0xf70e5939 | 0
8496 this._e = 0xffc00b31 | 0
8497 this._f = 0x68581511 | 0
8498 this._g = 0x64f98fa7 | 0
8499 this._h = 0xbefa4fa4 | 0
8500
8501 return this
8502 }
8503
8504 Sha224.prototype._hash = function () {
8505 var H = new Buffer(28)
8506
8507 H.writeInt32BE(this._a, 0)
8508 H.writeInt32BE(this._b, 4)
8509 H.writeInt32BE(this._c, 8)
8510 H.writeInt32BE(this._d, 12)
8511 H.writeInt32BE(this._e, 16)
8512 H.writeInt32BE(this._f, 20)
8513 H.writeInt32BE(this._g, 24)
8514
8515 return H
8516 }
8517
8518 module.exports = Sha224
8519
8520 }).call(this,require("buffer").Buffer)
8521 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8522 (function (Buffer){
8523 /**
8524 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8525 * in FIPS 180-2
8526 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8527 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8528 *
8529 */
8530
8531 var inherits = require('inherits')
8532 var Hash = require('./hash')
8533
8534 var K = [
8535 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8536 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8537 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8538 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8539 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8540 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8541 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8542 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8543 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8544 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8545 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8546 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8547 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8548 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8549 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8550 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8551 ]
8552
8553 var W = new Array(64)
8554
8555 function Sha256 () {
8556 this.init()
8557
8558 this._w = W // new Array(64)
8559
8560 Hash.call(this, 64, 56)
8561 }
8562
8563 inherits(Sha256, Hash)
8564
8565 Sha256.prototype.init = function () {
8566 this._a = 0x6a09e667 | 0
8567 this._b = 0xbb67ae85 | 0
8568 this._c = 0x3c6ef372 | 0
8569 this._d = 0xa54ff53a | 0
8570 this._e = 0x510e527f | 0
8571 this._f = 0x9b05688c | 0
8572 this._g = 0x1f83d9ab | 0
8573 this._h = 0x5be0cd19 | 0
8574
8575 return this
8576 }
8577
8578 function S (X, n) {
8579 return (X >>> n) | (X << (32 - n))
8580 }
8581
8582 function R (X, n) {
8583 return (X >>> n)
8584 }
8585
8586 function Ch (x, y, z) {
8587 return ((x & y) ^ ((~x) & z))
8588 }
8589
8590 function Maj (x, y, z) {
8591 return ((x & y) ^ (x & z) ^ (y & z))
8592 }
8593
8594 function Sigma0256 (x) {
8595 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8596 }
8597
8598 function Sigma1256 (x) {
8599 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8600 }
8601
8602 function Gamma0256 (x) {
8603 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8604 }
8605
8606 function Gamma1256 (x) {
8607 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8608 }
8609
8610 Sha256.prototype._update = function (M) {
8611 var W = this._w
8612
8613 var a = this._a | 0
8614 var b = this._b | 0
8615 var c = this._c | 0
8616 var d = this._d | 0
8617 var e = this._e | 0
8618 var f = this._f | 0
8619 var g = this._g | 0
8620 var h = this._h | 0
8621
8622 var j = 0
8623
8624 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8625 function loop (w) {
8626 W[j] = w
8627
8628 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8629 var T2 = Sigma0256(a) + Maj(a, b, c)
8630
8631 h = g
8632 g = f
8633 f = e
8634 e = d + T1
8635 d = c
8636 c = b
8637 b = a
8638 a = T1 + T2
8639
8640 j++
8641 }
8642
8643 while (j < 16) loop(M.readInt32BE(j * 4))
8644 while (j < 64) loop(calcW())
8645
8646 this._a = (a + this._a) | 0
8647 this._b = (b + this._b) | 0
8648 this._c = (c + this._c) | 0
8649 this._d = (d + this._d) | 0
8650 this._e = (e + this._e) | 0
8651 this._f = (f + this._f) | 0
8652 this._g = (g + this._g) | 0
8653 this._h = (h + this._h) | 0
8654 }
8655
8656 Sha256.prototype._hash = function () {
8657 var H = new Buffer(32)
8658
8659 H.writeInt32BE(this._a, 0)
8660 H.writeInt32BE(this._b, 4)
8661 H.writeInt32BE(this._c, 8)
8662 H.writeInt32BE(this._d, 12)
8663 H.writeInt32BE(this._e, 16)
8664 H.writeInt32BE(this._f, 20)
8665 H.writeInt32BE(this._g, 24)
8666 H.writeInt32BE(this._h, 28)
8667
8668 return H
8669 }
8670
8671 module.exports = Sha256
8672
8673 }).call(this,require("buffer").Buffer)
8674 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8675 (function (Buffer){
8676 var inherits = require('inherits')
8677 var SHA512 = require('./sha512')
8678 var Hash = require('./hash')
8679
8680 var W = new Array(160)
8681
8682 function Sha384 () {
8683 this.init()
8684 this._w = W
8685
8686 Hash.call(this, 128, 112)
8687 }
8688
8689 inherits(Sha384, SHA512)
8690
8691 Sha384.prototype.init = function () {
8692 this._a = 0xcbbb9d5d | 0
8693 this._b = 0x629a292a | 0
8694 this._c = 0x9159015a | 0
8695 this._d = 0x152fecd8 | 0
8696 this._e = 0x67332667 | 0
8697 this._f = 0x8eb44a87 | 0
8698 this._g = 0xdb0c2e0d | 0
8699 this._h = 0x47b5481d | 0
8700
8701 this._al = 0xc1059ed8 | 0
8702 this._bl = 0x367cd507 | 0
8703 this._cl = 0x3070dd17 | 0
8704 this._dl = 0xf70e5939 | 0
8705 this._el = 0xffc00b31 | 0
8706 this._fl = 0x68581511 | 0
8707 this._gl = 0x64f98fa7 | 0
8708 this._hl = 0xbefa4fa4 | 0
8709
8710 return this
8711 }
8712
8713 Sha384.prototype._hash = function () {
8714 var H = new Buffer(48)
8715
8716 function writeInt64BE (h, l, offset) {
8717 H.writeInt32BE(h, offset)
8718 H.writeInt32BE(l, offset + 4)
8719 }
8720
8721 writeInt64BE(this._a, this._al, 0)
8722 writeInt64BE(this._b, this._bl, 8)
8723 writeInt64BE(this._c, this._cl, 16)
8724 writeInt64BE(this._d, this._dl, 24)
8725 writeInt64BE(this._e, this._el, 32)
8726 writeInt64BE(this._f, this._fl, 40)
8727
8728 return H
8729 }
8730
8731 module.exports = Sha384
8732
8733 }).call(this,require("buffer").Buffer)
8734 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8735 (function (Buffer){
8736 var inherits = require('inherits')
8737 var Hash = require('./hash')
8738
8739 var K = [
8740 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8741 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8742 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8743 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8744 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8745 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8746 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8747 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8748 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8749 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8750 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8751 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8752 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8753 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8754 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8755 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8756 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8757 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8758 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8759 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8760 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8761 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8762 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8763 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8764 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8765 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8766 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8767 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8768 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8769 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8770 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8771 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8772 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8773 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8774 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8775 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8776 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8777 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8778 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8779 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8780 ]
8781
8782 var W = new Array(160)
8783
8784 function Sha512 () {
8785 this.init()
8786 this._w = W
8787
8788 Hash.call(this, 128, 112)
8789 }
8790
8791 inherits(Sha512, Hash)
8792
8793 Sha512.prototype.init = function () {
8794 this._a = 0x6a09e667 | 0
8795 this._b = 0xbb67ae85 | 0
8796 this._c = 0x3c6ef372 | 0
8797 this._d = 0xa54ff53a | 0
8798 this._e = 0x510e527f | 0
8799 this._f = 0x9b05688c | 0
8800 this._g = 0x1f83d9ab | 0
8801 this._h = 0x5be0cd19 | 0
8802
8803 this._al = 0xf3bcc908 | 0
8804 this._bl = 0x84caa73b | 0
8805 this._cl = 0xfe94f82b | 0
8806 this._dl = 0x5f1d36f1 | 0
8807 this._el = 0xade682d1 | 0
8808 this._fl = 0x2b3e6c1f | 0
8809 this._gl = 0xfb41bd6b | 0
8810 this._hl = 0x137e2179 | 0
8811
8812 return this
8813 }
8814
8815 function S (X, Xl, n) {
8816 return (X >>> n) | (Xl << (32 - n))
8817 }
8818
8819 function Ch (x, y, z) {
8820 return ((x & y) ^ ((~x) & z))
8821 }
8822
8823 function Maj (x, y, z) {
8824 return ((x & y) ^ (x & z) ^ (y & z))
8825 }
8826
8827 Sha512.prototype._update = function (M) {
8828 var W = this._w
8829
8830 var a = this._a | 0
8831 var b = this._b | 0
8832 var c = this._c | 0
8833 var d = this._d | 0
8834 var e = this._e | 0
8835 var f = this._f | 0
8836 var g = this._g | 0
8837 var h = this._h | 0
8838
8839 var al = this._al | 0
8840 var bl = this._bl | 0
8841 var cl = this._cl | 0
8842 var dl = this._dl | 0
8843 var el = this._el | 0
8844 var fl = this._fl | 0
8845 var gl = this._gl | 0
8846 var hl = this._hl | 0
8847
8848 var i = 0, j = 0
8849 var Wi, Wil
8850 function calcW () {
8851 var x = W[j - 15 * 2]
8852 var xl = W[j - 15 * 2 + 1]
8853 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8854 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8855
8856 x = W[j - 2 * 2]
8857 xl = W[j - 2 * 2 + 1]
8858 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8859 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8860
8861 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8862 var Wi7 = W[j - 7 * 2]
8863 var Wi7l = W[j - 7 * 2 + 1]
8864
8865 var Wi16 = W[j - 16 * 2]
8866 var Wi16l = W[j - 16 * 2 + 1]
8867
8868 Wil = gamma0l + Wi7l
8869 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8870 Wil = Wil + gamma1l
8871 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8872 Wil = Wil + Wi16l
8873 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8874 }
8875
8876 function loop () {
8877 W[j] = Wi
8878 W[j + 1] = Wil
8879
8880 var maj = Maj(a, b, c)
8881 var majl = Maj(al, bl, cl)
8882
8883 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8884 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8885 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8886 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
8887
8888 // t1 = h + sigma1 + ch + K[i] + W[i]
8889 var Ki = K[j]
8890 var Kil = K[j + 1]
8891
8892 var ch = Ch(e, f, g)
8893 var chl = Ch(el, fl, gl)
8894
8895 var t1l = hl + sigma1l
8896 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8897 t1l = t1l + chl
8898 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8899 t1l = t1l + Kil
8900 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8901 t1l = t1l + Wil
8902 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
8903
8904 // t2 = sigma0 + maj
8905 var t2l = sigma0l + majl
8906 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
8907
8908 h = g
8909 hl = gl
8910 g = f
8911 gl = fl
8912 f = e
8913 fl = el
8914 el = (dl + t1l) | 0
8915 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8916 d = c
8917 dl = cl
8918 c = b
8919 cl = bl
8920 b = a
8921 bl = al
8922 al = (t1l + t2l) | 0
8923 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8924
8925 i++
8926 j += 2
8927 }
8928
8929 while (i < 16) {
8930 Wi = M.readInt32BE(j * 4)
8931 Wil = M.readInt32BE(j * 4 + 4)
8932
8933 loop()
8934 }
8935
8936 while (i < 80) {
8937 calcW()
8938 loop()
8939 }
8940
8941 this._al = (this._al + al) | 0
8942 this._bl = (this._bl + bl) | 0
8943 this._cl = (this._cl + cl) | 0
8944 this._dl = (this._dl + dl) | 0
8945 this._el = (this._el + el) | 0
8946 this._fl = (this._fl + fl) | 0
8947 this._gl = (this._gl + gl) | 0
8948 this._hl = (this._hl + hl) | 0
8949
8950 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8951 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8952 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8953 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8954 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8955 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8956 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8957 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8958 }
8959
8960 Sha512.prototype._hash = function () {
8961 var H = new Buffer(64)
8962
8963 function writeInt64BE (h, l, offset) {
8964 H.writeInt32BE(h, offset)
8965 H.writeInt32BE(l, offset + 4)
8966 }
8967
8968 writeInt64BE(this._a, this._al, 0)
8969 writeInt64BE(this._b, this._bl, 8)
8970 writeInt64BE(this._c, this._cl, 16)
8971 writeInt64BE(this._d, this._dl, 24)
8972 writeInt64BE(this._e, this._el, 32)
8973 writeInt64BE(this._f, this._fl, 40)
8974 writeInt64BE(this._g, this._gl, 48)
8975 writeInt64BE(this._h, this._hl, 56)
8976
8977 return H
8978 }
8979
8980 module.exports = Sha512
8981
8982 }).call(this,require("buffer").Buffer)
8983 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8984 (function (Buffer){
8985 'use strict';
8986 var createHash = require('create-hash/browser');
8987 var inherits = require('inherits')
8988
8989 var Transform = require('stream').Transform
8990
8991 var ZEROS = new Buffer(128)
8992 ZEROS.fill(0)
8993
8994 function Hmac(alg, key) {
8995 Transform.call(this)
8996
8997 if (typeof key === 'string') {
8998 key = new Buffer(key)
8999 }
9000
9001 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9002
9003 this._alg = alg
9004 this._key = key
9005
9006 if (key.length > blocksize) {
9007 key = createHash(alg).update(key).digest()
9008
9009 } else if (key.length < blocksize) {
9010 key = Buffer.concat([key, ZEROS], blocksize)
9011 }
9012
9013 var ipad = this._ipad = new Buffer(blocksize)
9014 var opad = this._opad = new Buffer(blocksize)
9015
9016 for (var i = 0; i < blocksize; i++) {
9017 ipad[i] = key[i] ^ 0x36
9018 opad[i] = key[i] ^ 0x5C
9019 }
9020
9021 this._hash = createHash(alg).update(ipad)
9022 }
9023
9024 inherits(Hmac, Transform)
9025
9026 Hmac.prototype.update = function (data, enc) {
9027 this._hash.update(data, enc)
9028
9029 return this
9030 }
9031
9032 Hmac.prototype._transform = function (data, _, next) {
9033 this._hash.update(data)
9034
9035 next()
9036 }
9037
9038 Hmac.prototype._flush = function (next) {
9039 this.push(this.digest())
9040
9041 next()
9042 }
9043
9044 Hmac.prototype.digest = function (enc) {
9045 var h = this._hash.digest()
9046
9047 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9048 }
9049
9050 module.exports = function createHmac(alg, key) {
9051 return new Hmac(alg, key)
9052 }
9053
9054 }).call(this,require("buffer").Buffer)
9055 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9056 arguments[4][12][0].apply(exports,arguments)
9057 },{"dup":12}],47:[function(require,module,exports){
9058 var assert = require('assert')
9059 var BigInteger = require('bigi')
9060
9061 var Point = require('./point')
9062
9063 function Curve(p, a, b, Gx, Gy, n, h) {
9064 this.p = p
9065 this.a = a
9066 this.b = b
9067 this.G = Point.fromAffine(this, Gx, Gy)
9068 this.n = n
9069 this.h = h
9070
9071 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9072
9073 // result caching
9074 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9075 }
9076
9077 Curve.prototype.pointFromX = function(isOdd, x) {
9078 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9079 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9080
9081 var y = beta
9082 if (beta.isEven() ^ !isOdd) {
9083 y = this.p.subtract(y) // -y % p
9084 }
9085
9086 return Point.fromAffine(this, x, y)
9087 }
9088
9089 Curve.prototype.isInfinity = function(Q) {
9090 if (Q === this.infinity) return true
9091
9092 return Q.z.signum() === 0 && Q.y.signum() !== 0
9093 }
9094
9095 Curve.prototype.isOnCurve = function(Q) {
9096 if (this.isInfinity(Q)) return true
9097
9098 var x = Q.affineX
9099 var y = Q.affineY
9100 var a = this.a
9101 var b = this.b
9102 var p = this.p
9103
9104 // Check that xQ and yQ are integers in the interval [0, p - 1]
9105 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9106 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9107
9108 // and check that y^2 = x^3 + ax + b (mod p)
9109 var lhs = y.square().mod(p)
9110 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9111 return lhs.equals(rhs)
9112 }
9113
9114 /**
9115 * Validate an elliptic curve point.
9116 *
9117 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9118 */
9119 Curve.prototype.validate = function(Q) {
9120 // Check Q != O
9121 assert(!this.isInfinity(Q), 'Point is at infinity')
9122 assert(this.isOnCurve(Q), 'Point is not on the curve')
9123
9124 // Check nQ = O (where Q is a scalar multiple of G)
9125 var nQ = Q.multiply(this.n)
9126 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9127
9128 return true
9129 }
9130
9131 module.exports = Curve
9132
9133 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9134 module.exports={
9135 "secp128r1": {
9136 "p": "fffffffdffffffffffffffffffffffff",
9137 "a": "fffffffdfffffffffffffffffffffffc",
9138 "b": "e87579c11079f43dd824993c2cee5ed3",
9139 "n": "fffffffe0000000075a30d1b9038a115",
9140 "h": "01",
9141 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9142 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9143 },
9144 "secp160k1": {
9145 "p": "fffffffffffffffffffffffffffffffeffffac73",
9146 "a": "00",
9147 "b": "07",
9148 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9149 "h": "01",
9150 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9151 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9152 },
9153 "secp160r1": {
9154 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9155 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9156 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9157 "n": "0100000000000000000001f4c8f927aed3ca752257",
9158 "h": "01",
9159 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9160 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9161 },
9162 "secp192k1": {
9163 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9164 "a": "00",
9165 "b": "03",
9166 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9167 "h": "01",
9168 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9169 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9170 },
9171 "secp192r1": {
9172 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9173 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9174 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9175 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9176 "h": "01",
9177 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9178 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9179 },
9180 "secp256k1": {
9181 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9182 "a": "00",
9183 "b": "07",
9184 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9185 "h": "01",
9186 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9187 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9188 },
9189 "secp256r1": {
9190 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9191 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9192 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9193 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9194 "h": "01",
9195 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9196 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9197 }
9198 }
9199
9200 },{}],49:[function(require,module,exports){
9201 var Point = require('./point')
9202 var Curve = require('./curve')
9203
9204 var getCurveByName = require('./names')
9205
9206 module.exports = {
9207 Curve: Curve,
9208 Point: Point,
9209 getCurveByName: getCurveByName
9210 }
9211
9212 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9213 var BigInteger = require('bigi')
9214
9215 var curves = require('./curves')
9216 var Curve = require('./curve')
9217
9218 function getCurveByName(name) {
9219 var curve = curves[name]
9220 if (!curve) return null
9221
9222 var p = new BigInteger(curve.p, 16)
9223 var a = new BigInteger(curve.a, 16)
9224 var b = new BigInteger(curve.b, 16)
9225 var n = new BigInteger(curve.n, 16)
9226 var h = new BigInteger(curve.h, 16)
9227 var Gx = new BigInteger(curve.Gx, 16)
9228 var Gy = new BigInteger(curve.Gy, 16)
9229
9230 return new Curve(p, a, b, Gx, Gy, n, h)
9231 }
9232
9233 module.exports = getCurveByName
9234
9235 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9236 (function (Buffer){
9237 var assert = require('assert')
9238 var BigInteger = require('bigi')
9239
9240 var THREE = BigInteger.valueOf(3)
9241
9242 function Point(curve, x, y, z) {
9243 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9244
9245 this.curve = curve
9246 this.x = x
9247 this.y = y
9248 this.z = z
9249 this._zInv = null
9250
9251 this.compressed = true
9252 }
9253
9254 Object.defineProperty(Point.prototype, 'zInv', {
9255 get: function() {
9256 if (this._zInv === null) {
9257 this._zInv = this.z.modInverse(this.curve.p)
9258 }
9259
9260 return this._zInv
9261 }
9262 })
9263
9264 Object.defineProperty(Point.prototype, 'affineX', {
9265 get: function() {
9266 return this.x.multiply(this.zInv).mod(this.curve.p)
9267 }
9268 })
9269
9270 Object.defineProperty(Point.prototype, 'affineY', {
9271 get: function() {
9272 return this.y.multiply(this.zInv).mod(this.curve.p)
9273 }
9274 })
9275
9276 Point.fromAffine = function(curve, x, y) {
9277 return new Point(curve, x, y, BigInteger.ONE)
9278 }
9279
9280 Point.prototype.equals = function(other) {
9281 if (other === this) return true
9282 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9283 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9284
9285 // u = Y2 * Z1 - Y1 * Z2
9286 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9287
9288 if (u.signum() !== 0) return false
9289
9290 // v = X2 * Z1 - X1 * Z2
9291 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9292
9293 return v.signum() === 0
9294 }
9295
9296 Point.prototype.negate = function() {
9297 var y = this.curve.p.subtract(this.y)
9298
9299 return new Point(this.curve, this.x, y, this.z)
9300 }
9301
9302 Point.prototype.add = function(b) {
9303 if (this.curve.isInfinity(this)) return b
9304 if (this.curve.isInfinity(b)) return this
9305
9306 var x1 = this.x
9307 var y1 = this.y
9308 var x2 = b.x
9309 var y2 = b.y
9310
9311 // u = Y2 * Z1 - Y1 * Z2
9312 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9313 // v = X2 * Z1 - X1 * Z2
9314 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9315
9316 if (v.signum() === 0) {
9317 if (u.signum() === 0) {
9318 return this.twice() // this == b, so double
9319 }
9320
9321 return this.curve.infinity // this = -b, so infinity
9322 }
9323
9324 var v2 = v.square()
9325 var v3 = v2.multiply(v)
9326 var x1v2 = x1.multiply(v2)
9327 var zu2 = u.square().multiply(this.z)
9328
9329 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9330 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9331 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9332 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)
9333 // z3 = v^3 * z1 * z2
9334 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9335
9336 return new Point(this.curve, x3, y3, z3)
9337 }
9338
9339 Point.prototype.twice = function() {
9340 if (this.curve.isInfinity(this)) return this
9341 if (this.y.signum() === 0) return this.curve.infinity
9342
9343 var x1 = this.x
9344 var y1 = this.y
9345
9346 var y1z1 = y1.multiply(this.z)
9347 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9348 var a = this.curve.a
9349
9350 // w = 3 * x1^2 + a * z1^2
9351 var w = x1.square().multiply(THREE)
9352
9353 if (a.signum() !== 0) {
9354 w = w.add(this.z.square().multiply(a))
9355 }
9356
9357 w = w.mod(this.curve.p)
9358 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9359 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9360 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9361 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9362 // z3 = 8 * (y1 * z1)^3
9363 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9364
9365 return new Point(this.curve, x3, y3, z3)
9366 }
9367
9368 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9369 // TODO: modularize the multiplication algorithm
9370 Point.prototype.multiply = function(k) {
9371 if (this.curve.isInfinity(this)) return this
9372 if (k.signum() === 0) return this.curve.infinity
9373
9374 var e = k
9375 var h = e.multiply(THREE)
9376
9377 var neg = this.negate()
9378 var R = this
9379
9380 for (var i = h.bitLength() - 2; i > 0; --i) {
9381 R = R.twice()
9382
9383 var hBit = h.testBit(i)
9384 var eBit = e.testBit(i)
9385
9386 if (hBit != eBit) {
9387 R = R.add(hBit ? this : neg)
9388 }
9389 }
9390
9391 return R
9392 }
9393
9394 // Compute this*j + x*k (simultaneous multiplication)
9395 Point.prototype.multiplyTwo = function(j, x, k) {
9396 var i
9397
9398 if (j.bitLength() > k.bitLength())
9399 i = j.bitLength() - 1
9400 else
9401 i = k.bitLength() - 1
9402
9403 var R = this.curve.infinity
9404 var both = this.add(x)
9405
9406 while (i >= 0) {
9407 R = R.twice()
9408
9409 var jBit = j.testBit(i)
9410 var kBit = k.testBit(i)
9411
9412 if (jBit) {
9413 if (kBit) {
9414 R = R.add(both)
9415
9416 } else {
9417 R = R.add(this)
9418 }
9419
9420 } else {
9421 if (kBit) {
9422 R = R.add(x)
9423 }
9424 }
9425 --i
9426 }
9427
9428 return R
9429 }
9430
9431 Point.prototype.getEncoded = function(compressed) {
9432 if (compressed == undefined) compressed = this.compressed
9433 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9434
9435 var x = this.affineX
9436 var y = this.affineY
9437
9438 var buffer
9439
9440 // Determine size of q in bytes
9441 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9442
9443 // 0x02/0x03 | X
9444 if (compressed) {
9445 buffer = new Buffer(1 + byteLength)
9446 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9447
9448 // 0x04 | X | Y
9449 } else {
9450 buffer = new Buffer(1 + byteLength + byteLength)
9451 buffer.writeUInt8(0x04, 0)
9452
9453 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9454 }
9455
9456 x.toBuffer(byteLength).copy(buffer, 1)
9457
9458 return buffer
9459 }
9460
9461 Point.decodeFrom = function(curve, buffer) {
9462 var type = buffer.readUInt8(0)
9463 var compressed = (type !== 4)
9464
9465 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9466 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9467
9468 var Q
9469 if (compressed) {
9470 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9471 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9472
9473 var isOdd = (type === 0x03)
9474 Q = curve.pointFromX(isOdd, x)
9475
9476 } else {
9477 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9478
9479 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9480 Q = Point.fromAffine(curve, x, y)
9481 }
9482
9483 Q.compressed = compressed
9484 return Q
9485 }
9486
9487 Point.prototype.toString = function () {
9488 if (this.curve.isInfinity(this)) return '(INFINITY)'
9489
9490 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9491 }
9492
9493 module.exports = Point
9494
9495 }).call(this,require("buffer").Buffer)
9496 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9497 (function (process,global,Buffer){
9498 'use strict';
9499
9500 var crypto = global.crypto || global.msCrypto
9501 if(crypto && crypto.getRandomValues) {
9502 module.exports = randomBytes;
9503 } else {
9504 module.exports = oldBrowser;
9505 }
9506 function randomBytes(size, cb) {
9507 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9508 /* This will not work in older browsers.
9509 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9510 */
9511
9512 crypto.getRandomValues(bytes);
9513 if (typeof cb === 'function') {
9514 return process.nextTick(function () {
9515 cb(null, bytes);
9516 });
9517 }
9518 return bytes;
9519 }
9520 function oldBrowser() {
9521 throw new Error(
9522 'secure random number generation not supported by this browser\n'+
9523 'use chrome, FireFox or Internet Explorer 11'
9524 )
9525 }
9526
9527 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9528 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9529 (function (Buffer){
9530 'use strict';
9531
9532 function getFunctionName(fn) {
9533 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9534 }
9535
9536 function getTypeTypeName(type) {
9537 if (nativeTypes.Function(type)) {
9538 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9539 }
9540 if (nativeTypes.Object(type)) return JSON.stringify(type);
9541
9542 return type;
9543 }
9544
9545 function getValueTypeName(value) {
9546 if (nativeTypes.Null(value)) return '';
9547
9548 return getFunctionName(value.constructor);
9549 }
9550
9551 function tfErrorString(type, value) {
9552 var typeTypeName = getTypeTypeName(type);
9553 var valueTypeName = getValueTypeName(value);
9554
9555 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9556 }
9557
9558 function tfPropertyErrorString(type, name, value) {
9559 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9560 }
9561
9562 var nativeTypes = {
9563 Array: (function (_Array) {
9564 function Array(_x) {
9565 return _Array.apply(this, arguments);
9566 }
9567
9568 Array.toString = function () {
9569 return _Array.toString();
9570 };
9571
9572 return Array;
9573 })(function (value) {
9574 return value !== null && value !== undefined && value.constructor === Array;
9575 }),
9576 Boolean: function Boolean(value) {
9577 return typeof value === 'boolean';
9578 },
9579 Buffer: (function (_Buffer) {
9580 function Buffer(_x2) {
9581 return _Buffer.apply(this, arguments);
9582 }
9583
9584 Buffer.toString = function () {
9585 return _Buffer.toString();
9586 };
9587
9588 return Buffer;
9589 })(function (value) {
9590 return Buffer.isBuffer(value);
9591 }),
9592 Function: function Function(value) {
9593 return typeof value === 'function';
9594 },
9595 Null: function Null(value) {
9596 return value === undefined || value === null;
9597 },
9598 Number: function Number(value) {
9599 return typeof value === 'number';
9600 },
9601 Object: function Object(value) {
9602 return typeof value === 'object';
9603 },
9604 String: function String(value) {
9605 return typeof value === 'string';
9606 },
9607 '': function _() {
9608 return true;
9609 }
9610 };
9611
9612 function tJSON(type) {
9613 return type && type.toJSON ? type.toJSON() : type;
9614 }
9615
9616 function sJSON(type) {
9617 var json = tJSON(type);
9618 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9619 }
9620
9621 var otherTypes = {
9622 arrayOf: function arrayOf(type) {
9623 function arrayOf(value, strict) {
9624 try {
9625 return nativeTypes.Array(value) && value.every(function (x) {
9626 return typeforce(type, x, strict);
9627 });
9628 } catch (e) {
9629 return false;
9630 }
9631 }
9632 arrayOf.toJSON = function () {
9633 return [tJSON(type)];
9634 };
9635
9636 return arrayOf;
9637 },
9638
9639 maybe: function maybe(type) {
9640 function maybe(value, strict) {
9641 return nativeTypes.Null(value) || typeforce(type, value, strict);
9642 }
9643 maybe.toJSON = function () {
9644 return '?' + sJSON(type);
9645 };
9646
9647 return maybe;
9648 },
9649
9650 object: function object(type) {
9651 function object(value, strict) {
9652 typeforce(nativeTypes.Object, value, strict);
9653
9654 var propertyName, propertyType, propertyValue;
9655
9656 try {
9657 for (propertyName in type) {
9658 propertyType = type[propertyName];
9659 propertyValue = value[propertyName];
9660
9661 typeforce(propertyType, propertyValue, strict);
9662 }
9663 } catch (e) {
9664 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9665 }
9666
9667 if (strict) {
9668 for (propertyName in value) {
9669 if (type[propertyName]) continue;
9670
9671 throw new TypeError('Unexpected property "' + propertyName + '"');
9672 }
9673 }
9674
9675 return true;
9676 }
9677 object.toJSON = function () {
9678 return type;
9679 };
9680
9681 return object;
9682 },
9683
9684 oneOf: function oneOf() {
9685 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9686 types[_key] = arguments[_key];
9687 }
9688
9689 function oneOf(value, strict) {
9690 return types.some(function (type) {
9691 try {
9692 return typeforce(type, value, strict);
9693 } catch (e) {
9694 return false;
9695 }
9696 });
9697 }
9698 oneOf.toJSON = function () {
9699 return types.map(sJSON).join('|');
9700 };
9701
9702 return oneOf;
9703 },
9704
9705 quacksLike: function quacksLike(type) {
9706 function quacksLike(value, strict) {
9707 return type === getValueTypeName(value);
9708 }
9709 quacksLike.toJSON = function () {
9710 return type;
9711 };
9712
9713 return quacksLike;
9714 },
9715
9716 tuple: function tuple() {
9717 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9718 types[_key2] = arguments[_key2];
9719 }
9720
9721 function tuple(value, strict) {
9722 return types.every(function (type, i) {
9723 return typeforce(type, value[i], strict);
9724 });
9725 }
9726 tuple.toJSON = function () {
9727 return '(' + types.map(sJSON).join(', ') + ')';
9728 };
9729
9730 return tuple;
9731 },
9732
9733 value: function value(expected) {
9734 function value(actual) {
9735 return actual === expected;
9736 }
9737 value.toJSON = function () {
9738 return expected;
9739 };
9740
9741 return value;
9742 }
9743 };
9744
9745 function compile(type) {
9746 if (nativeTypes.String(type)) {
9747 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9748
9749 return nativeTypes[type] || otherTypes.quacksLike(type);
9750 } else if (type && nativeTypes.Object(type)) {
9751 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9752
9753 var compiled = {};
9754
9755 for (var propertyName in type) {
9756 compiled[propertyName] = compile(type[propertyName]);
9757 }
9758
9759 return otherTypes.object(compiled);
9760 } else if (nativeTypes.Function(type)) {
9761 return type;
9762 }
9763
9764 return otherTypes.value(type);
9765 }
9766
9767 function typeforce(_x3, _x4, _x5) {
9768 var _again = true;
9769
9770 _function: while (_again) {
9771 var type = _x3,
9772 value = _x4,
9773 strict = _x5;
9774 _again = false;
9775
9776 if (nativeTypes.Function(type)) {
9777 if (type(value, strict)) return true;
9778
9779 throw new TypeError(tfErrorString(type, value));
9780 }
9781
9782 // JIT
9783 _x3 = compile(type);
9784 _x4 = value;
9785 _x5 = strict;
9786 _again = true;
9787 continue _function;
9788 }
9789 }
9790
9791 // assign all types to typeforce function
9792 var typeName;
9793 Object.keys(nativeTypes).forEach(function (typeName) {
9794 var nativeType = nativeTypes[typeName];
9795 nativeType.toJSON = function () {
9796 return typeName;
9797 };
9798
9799 typeforce[typeName] = nativeType;
9800 });
9801
9802 for (typeName in otherTypes) {
9803 typeforce[typeName] = otherTypes[typeName];
9804 }
9805
9806 module.exports = typeforce;
9807 module.exports.compile = compile;
9808 }).call(this,require("buffer").Buffer)
9809 },{"buffer":7}],54:[function(require,module,exports){
9810 (function (Buffer){
9811 var assert = require('assert')
9812 var base58check = require('bs58check')
9813 var typeForce = require('typeforce')
9814 var networks = require('./networks')
9815 var scripts = require('./scripts')
9816
9817 function findScriptTypeByVersion (version) {
9818 for (var networkName in networks) {
9819 var network = networks[networkName]
9820
9821 if (version === network.pubKeyHash) return 'pubkeyhash'
9822 if (version === network.scriptHash) return 'scripthash'
9823 }
9824 }
9825
9826 function Address (hash, version) {
9827 typeForce('Buffer', hash)
9828
9829 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9830 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9831
9832 this.hash = hash
9833 this.version = version
9834 }
9835
9836 Address.fromBase58Check = function (string) {
9837 var payload = base58check.decode(string)
9838 var version = payload.readUInt8(0)
9839 var hash = payload.slice(1)
9840
9841 return new Address(hash, version)
9842 }
9843
9844 Address.fromOutputScript = function (script, network) {
9845 network = network || networks.bitcoin
9846
9847 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9848 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
9849
9850 assert(false, script.toASM() + ' has no matching Address')
9851 }
9852
9853 Address.prototype.toBase58Check = function () {
9854 var payload = new Buffer(21)
9855 payload.writeUInt8(this.version, 0)
9856 this.hash.copy(payload, 1)
9857
9858 return base58check.encode(payload)
9859 }
9860
9861 Address.prototype.toOutputScript = function () {
9862 var scriptType = findScriptTypeByVersion(this.version)
9863
9864 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9865 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9866
9867 assert(false, this.toString() + ' has no matching Script')
9868 }
9869
9870 Address.prototype.toString = Address.prototype.toBase58Check
9871
9872 module.exports = Address
9873
9874 }).call(this,require("buffer").Buffer)
9875 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9876 var bs58check = require('bs58check')
9877
9878 function decode () {
9879 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9880
9881 return bs58check.decode.apply(undefined, arguments)
9882 }
9883
9884 function encode () {
9885 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9886
9887 return bs58check.encode.apply(undefined, arguments)
9888 }
9889
9890 module.exports = {
9891 decode: decode,
9892 encode: encode
9893 }
9894
9895 },{"bs58check":31}],56:[function(require,module,exports){
9896 (function (Buffer){
9897 var assert = require('assert')
9898 var bufferutils = require('./bufferutils')
9899 var crypto = require('./crypto')
9900
9901 var Transaction = require('./transaction')
9902
9903 function Block () {
9904 this.version = 1
9905 this.prevHash = null
9906 this.merkleRoot = null
9907 this.timestamp = 0
9908 this.bits = 0
9909 this.nonce = 0
9910 }
9911
9912 Block.fromBuffer = function (buffer) {
9913 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9914
9915 var offset = 0
9916 function readSlice (n) {
9917 offset += n
9918 return buffer.slice(offset - n, offset)
9919 }
9920
9921 function readUInt32 () {
9922 var i = buffer.readUInt32LE(offset)
9923 offset += 4
9924 return i
9925 }
9926
9927 var block = new Block()
9928 block.version = readUInt32()
9929 block.prevHash = readSlice(32)
9930 block.merkleRoot = readSlice(32)
9931 block.timestamp = readUInt32()
9932 block.bits = readUInt32()
9933 block.nonce = readUInt32()
9934
9935 if (buffer.length === 80) return block
9936
9937 function readVarInt () {
9938 var vi = bufferutils.readVarInt(buffer, offset)
9939 offset += vi.size
9940 return vi.number
9941 }
9942
9943 // FIXME: poor performance
9944 function readTransaction () {
9945 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9946
9947 offset += tx.toBuffer().length
9948 return tx
9949 }
9950
9951 var nTransactions = readVarInt()
9952 block.transactions = []
9953
9954 for (var i = 0; i < nTransactions; ++i) {
9955 var tx = readTransaction()
9956 block.transactions.push(tx)
9957 }
9958
9959 return block
9960 }
9961
9962 Block.fromHex = function (hex) {
9963 return Block.fromBuffer(new Buffer(hex, 'hex'))
9964 }
9965
9966 Block.prototype.getHash = function () {
9967 return crypto.hash256(this.toBuffer(true))
9968 }
9969
9970 Block.prototype.getId = function () {
9971 return bufferutils.reverse(this.getHash()).toString('hex')
9972 }
9973
9974 Block.prototype.getUTCDate = function () {
9975 var date = new Date(0) // epoch
9976 date.setUTCSeconds(this.timestamp)
9977
9978 return date
9979 }
9980
9981 Block.prototype.toBuffer = function (headersOnly) {
9982 var buffer = new Buffer(80)
9983
9984 var offset = 0
9985 function writeSlice (slice) {
9986 slice.copy(buffer, offset)
9987 offset += slice.length
9988 }
9989
9990 function writeUInt32 (i) {
9991 buffer.writeUInt32LE(i, offset)
9992 offset += 4
9993 }
9994
9995 writeUInt32(this.version)
9996 writeSlice(this.prevHash)
9997 writeSlice(this.merkleRoot)
9998 writeUInt32(this.timestamp)
9999 writeUInt32(this.bits)
10000 writeUInt32(this.nonce)
10001
10002 if (headersOnly || !this.transactions) return buffer
10003
10004 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10005 var txBuffers = this.transactions.map(function (tx) {
10006 return tx.toBuffer()
10007 })
10008
10009 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10010 }
10011
10012 Block.prototype.toHex = function (headersOnly) {
10013 return this.toBuffer(headersOnly).toString('hex')
10014 }
10015
10016 module.exports = Block
10017
10018 }).call(this,require("buffer").Buffer)
10019 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10020 (function (Buffer){
10021 var assert = require('assert')
10022 var opcodes = require('./opcodes')
10023
10024 // https://github.com/feross/buffer/blob/master/index.js#L1127
10025 function verifuint (value, max) {
10026 assert(typeof value === 'number', 'cannot write a non-number as a number')
10027 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10028 assert(value <= max, 'value is larger than maximum value for type')
10029 assert(Math.floor(value) === value, 'value has a fractional component')
10030 }
10031
10032 function pushDataSize (i) {
10033 return i < opcodes.OP_PUSHDATA1 ? 1
10034 : i < 0xff ? 2
10035 : i < 0xffff ? 3
10036 : 5
10037 }
10038
10039 function readPushDataInt (buffer, offset) {
10040 var opcode = buffer.readUInt8(offset)
10041 var number, size
10042
10043 // ~6 bit
10044 if (opcode < opcodes.OP_PUSHDATA1) {
10045 number = opcode
10046 size = 1
10047
10048 // 8 bit
10049 } else if (opcode === opcodes.OP_PUSHDATA1) {
10050 if (offset + 2 > buffer.length) return null
10051 number = buffer.readUInt8(offset + 1)
10052 size = 2
10053
10054 // 16 bit
10055 } else if (opcode === opcodes.OP_PUSHDATA2) {
10056 if (offset + 3 > buffer.length) return null
10057 number = buffer.readUInt16LE(offset + 1)
10058 size = 3
10059
10060 // 32 bit
10061 } else {
10062 if (offset + 5 > buffer.length) return null
10063 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10064
10065 number = buffer.readUInt32LE(offset + 1)
10066 size = 5
10067 }
10068
10069 return {
10070 opcode: opcode,
10071 number: number,
10072 size: size
10073 }
10074 }
10075
10076 function readUInt64LE (buffer, offset) {
10077 var a = buffer.readUInt32LE(offset)
10078 var b = buffer.readUInt32LE(offset + 4)
10079 b *= 0x100000000
10080
10081 verifuint(b + a, 0x001fffffffffffff)
10082
10083 return b + a
10084 }
10085
10086 function readVarInt (buffer, offset) {
10087 var t = buffer.readUInt8(offset)
10088 var number, size
10089
10090 // 8 bit
10091 if (t < 253) {
10092 number = t
10093 size = 1
10094
10095 // 16 bit
10096 } else if (t < 254) {
10097 number = buffer.readUInt16LE(offset + 1)
10098 size = 3
10099
10100 // 32 bit
10101 } else if (t < 255) {
10102 number = buffer.readUInt32LE(offset + 1)
10103 size = 5
10104
10105 // 64 bit
10106 } else {
10107 number = readUInt64LE(buffer, offset + 1)
10108 size = 9
10109 }
10110
10111 return {
10112 number: number,
10113 size: size
10114 }
10115 }
10116
10117 function writePushDataInt (buffer, number, offset) {
10118 var size = pushDataSize(number)
10119
10120 // ~6 bit
10121 if (size === 1) {
10122 buffer.writeUInt8(number, offset)
10123
10124 // 8 bit
10125 } else if (size === 2) {
10126 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10127 buffer.writeUInt8(number, offset + 1)
10128
10129 // 16 bit
10130 } else if (size === 3) {
10131 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10132 buffer.writeUInt16LE(number, offset + 1)
10133
10134 // 32 bit
10135 } else {
10136 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10137 buffer.writeUInt32LE(number, offset + 1)
10138 }
10139
10140 return size
10141 }
10142
10143 function writeUInt64LE (buffer, value, offset) {
10144 verifuint(value, 0x001fffffffffffff)
10145
10146 buffer.writeInt32LE(value & -1, offset)
10147 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10148 }
10149
10150 function varIntSize (i) {
10151 return i < 253 ? 1
10152 : i < 0x10000 ? 3
10153 : i < 0x100000000 ? 5
10154 : 9
10155 }
10156
10157 function writeVarInt (buffer, number, offset) {
10158 var size = varIntSize(number)
10159
10160 // 8 bit
10161 if (size === 1) {
10162 buffer.writeUInt8(number, offset)
10163
10164 // 16 bit
10165 } else if (size === 3) {
10166 buffer.writeUInt8(253, offset)
10167 buffer.writeUInt16LE(number, offset + 1)
10168
10169 // 32 bit
10170 } else if (size === 5) {
10171 buffer.writeUInt8(254, offset)
10172 buffer.writeUInt32LE(number, offset + 1)
10173
10174 // 64 bit
10175 } else {
10176 buffer.writeUInt8(255, offset)
10177 writeUInt64LE(buffer, number, offset + 1)
10178 }
10179
10180 return size
10181 }
10182
10183 function varIntBuffer (i) {
10184 var size = varIntSize(i)
10185 var buffer = new Buffer(size)
10186 writeVarInt(buffer, i, 0)
10187
10188 return buffer
10189 }
10190
10191 function reverse (buffer) {
10192 var buffer2 = new Buffer(buffer)
10193 Array.prototype.reverse.call(buffer2)
10194 return buffer2
10195 }
10196
10197 module.exports = {
10198 pushDataSize: pushDataSize,
10199 readPushDataInt: readPushDataInt,
10200 readUInt64LE: readUInt64LE,
10201 readVarInt: readVarInt,
10202 reverse: reverse,
10203 varIntBuffer: varIntBuffer,
10204 varIntSize: varIntSize,
10205 writePushDataInt: writePushDataInt,
10206 writeUInt64LE: writeUInt64LE,
10207 writeVarInt: writeVarInt
10208 }
10209
10210 }).call(this,require("buffer").Buffer)
10211 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10212 var createHash = require('create-hash')
10213
10214 function hash160 (buffer) {
10215 return ripemd160(sha256(buffer))
10216 }
10217
10218 function hash256 (buffer) {
10219 return sha256(sha256(buffer))
10220 }
10221
10222 function ripemd160 (buffer) {
10223 return createHash('rmd160').update(buffer).digest()
10224 }
10225
10226 function sha1 (buffer) {
10227 return createHash('sha1').update(buffer).digest()
10228 }
10229
10230 function sha256 (buffer) {
10231 return createHash('sha256').update(buffer).digest()
10232 }
10233
10234 // FIXME: Name not consistent with others
10235 var createHmac = require('create-hmac')
10236
10237 function HmacSHA256 (buffer, secret) {
10238 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10239 return createHmac('sha256', secret).update(buffer).digest()
10240 }
10241
10242 function HmacSHA512 (buffer, secret) {
10243 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10244 return createHmac('sha512', secret).update(buffer).digest()
10245 }
10246
10247 module.exports = {
10248 ripemd160: ripemd160,
10249 sha1: sha1,
10250 sha256: sha256,
10251 hash160: hash160,
10252 hash256: hash256,
10253 HmacSHA256: HmacSHA256,
10254 HmacSHA512: HmacSHA512
10255 }
10256
10257 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10258 (function (Buffer){
10259 var assert = require('assert')
10260 var createHmac = require('create-hmac')
10261 var typeForce = require('typeforce')
10262
10263 var BigInteger = require('bigi')
10264 var ECSignature = require('./ecsignature')
10265
10266 var ZERO = new Buffer([0])
10267 var ONE = new Buffer([1])
10268
10269 // https://tools.ietf.org/html/rfc6979#section-3.2
10270 function deterministicGenerateK (curve, hash, d, checkSig) {
10271 typeForce('Buffer', hash)
10272 typeForce('BigInteger', d)
10273
10274 // FIXME: remove/uncomment for 2.0.0
10275 // typeForce('Function', checkSig)
10276
10277 if (typeof checkSig !== 'function') {
10278 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10279
10280 checkSig = function (k) {
10281 var G = curve.G
10282 var n = curve.n
10283 var e = BigInteger.fromBuffer(hash)
10284
10285 var Q = G.multiply(k)
10286
10287 if (curve.isInfinity(Q))
10288 return false
10289
10290 var r = Q.affineX.mod(n)
10291 if (r.signum() === 0)
10292 return false
10293
10294 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10295 if (s.signum() === 0)
10296 return false
10297
10298 return true
10299 }
10300 }
10301
10302 // sanity check
10303 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10304
10305 var x = d.toBuffer(32)
10306 var k = new Buffer(32)
10307 var v = new Buffer(32)
10308
10309 // Step A, ignored as hash already provided
10310 // Step B
10311 v.fill(1)
10312
10313 // Step C
10314 k.fill(0)
10315
10316 // Step D
10317 k = createHmac('sha256', k)
10318 .update(v)
10319 .update(ZERO)
10320 .update(x)
10321 .update(hash)
10322 .digest()
10323
10324 // Step E
10325 v = createHmac('sha256', k).update(v).digest()
10326
10327 // Step F
10328 k = createHmac('sha256', k)
10329 .update(v)
10330 .update(ONE)
10331 .update(x)
10332 .update(hash)
10333 .digest()
10334
10335 // Step G
10336 v = createHmac('sha256', k).update(v).digest()
10337
10338 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10339 // Step H2b
10340 v = createHmac('sha256', k).update(v).digest()
10341
10342 var T = BigInteger.fromBuffer(v)
10343
10344 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10345 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10346 k = createHmac('sha256', k)
10347 .update(v)
10348 .update(ZERO)
10349 .digest()
10350
10351 v = createHmac('sha256', k).update(v).digest()
10352
10353 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10354 // Step H2b again
10355 v = createHmac('sha256', k).update(v).digest()
10356 T = BigInteger.fromBuffer(v)
10357 }
10358
10359 return T
10360 }
10361
10362 function sign (curve, hash, d) {
10363 var r, s
10364
10365 var e = BigInteger.fromBuffer(hash)
10366 var n = curve.n
10367 var G = curve.G
10368
10369 deterministicGenerateK(curve, hash, d, function (k) {
10370 var Q = G.multiply(k)
10371
10372 if (curve.isInfinity(Q))
10373 return false
10374
10375 r = Q.affineX.mod(n)
10376 if (r.signum() === 0)
10377 return false
10378
10379 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10380 if (s.signum() === 0)
10381 return false
10382
10383 return true
10384 })
10385
10386 var N_OVER_TWO = n.shiftRight(1)
10387
10388 // enforce low S values, see bip62: 'low s values in signatures'
10389 if (s.compareTo(N_OVER_TWO) > 0) {
10390 s = n.subtract(s)
10391 }
10392
10393 return new ECSignature(r, s)
10394 }
10395
10396 function verifyRaw (curve, e, signature, Q) {
10397 var n = curve.n
10398 var G = curve.G
10399
10400 var r = signature.r
10401 var s = signature.s
10402
10403 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10404 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10405 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10406
10407 // c = s^-1 mod n
10408 var c = s.modInverse(n)
10409
10410 // 1.4.4 Compute u1 = es^−1 mod n
10411 // u2 = rs^−1 mod n
10412 var u1 = e.multiply(c).mod(n)
10413 var u2 = r.multiply(c).mod(n)
10414
10415 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10416 var R = G.multiplyTwo(u1, Q, u2)
10417 var v = R.affineX.mod(n)
10418
10419 // 1.4.5 (cont.) Enforce R is not at infinity
10420 if (curve.isInfinity(R)) return false
10421
10422 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10423 return v.equals(r)
10424 }
10425
10426 function verify (curve, hash, signature, Q) {
10427 // 1.4.2 H = Hash(M), already done by the user
10428 // 1.4.3 e = H
10429 var e = BigInteger.fromBuffer(hash)
10430
10431 return verifyRaw(curve, e, signature, Q)
10432 }
10433
10434 /**
10435 * Recover a public key from a signature.
10436 *
10437 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10438 * Key Recovery Operation".
10439 *
10440 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10441 */
10442 function recoverPubKey (curve, e, signature, i) {
10443 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10444
10445 var n = curve.n
10446 var G = curve.G
10447
10448 var r = signature.r
10449 var s = signature.s
10450
10451 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10452 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10453
10454 // A set LSB signifies that the y-coordinate is odd
10455 var isYOdd = i & 1
10456
10457 // The more significant bit specifies whether we should use the
10458 // first or second candidate key.
10459 var isSecondKey = i >> 1
10460
10461 // 1.1 Let x = r + jn
10462 var x = isSecondKey ? r.add(n) : r
10463 var R = curve.pointFromX(isYOdd, x)
10464
10465 // 1.4 Check that nR is at infinity
10466 var nR = R.multiply(n)
10467 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10468
10469 // Compute -e from e
10470 var eNeg = e.negate().mod(n)
10471
10472 // 1.6.1 Compute Q = r^-1 (sR - eG)
10473 // Q = r^-1 (sR + -eG)
10474 var rInv = r.modInverse(n)
10475
10476 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10477 curve.validate(Q)
10478
10479 return Q
10480 }
10481
10482 /**
10483 * Calculate pubkey extraction parameter.
10484 *
10485 * When extracting a pubkey from a signature, we have to
10486 * distinguish four different cases. Rather than putting this
10487 * burden on the verifier, Bitcoin includes a 2-bit value with the
10488 * signature.
10489 *
10490 * This function simply tries all four cases and returns the value
10491 * that resulted in a successful pubkey recovery.
10492 */
10493 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10494 for (var i = 0; i < 4; i++) {
10495 var Qprime = recoverPubKey(curve, e, signature, i)
10496
10497 // 1.6.2 Verify Q
10498 if (Qprime.equals(Q)) {
10499 return i
10500 }
10501 }
10502
10503 throw new Error('Unable to find valid recovery factor')
10504 }
10505
10506 module.exports = {
10507 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10508 deterministicGenerateK: deterministicGenerateK,
10509 recoverPubKey: recoverPubKey,
10510 sign: sign,
10511 verify: verify,
10512 verifyRaw: verifyRaw
10513 }
10514
10515 }).call(this,require("buffer").Buffer)
10516 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10517 (function (Buffer){
10518 var assert = require('assert')
10519 var base58check = require('bs58check')
10520 var ecdsa = require('./ecdsa')
10521 var networks = require('./networks')
10522 var randomBytes = require('randombytes')
10523 var typeForce = require('typeforce')
10524
10525 var BigInteger = require('bigi')
10526 var ECPubKey = require('./ecpubkey')
10527
10528 var ecurve = require('ecurve')
10529 var secp256k1 = ecurve.getCurveByName('secp256k1')
10530
10531 function ECKey (d, compressed) {
10532 assert(d.signum() > 0, 'Private key must be greater than 0')
10533 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10534
10535 var Q = ECKey.curve.G.multiply(d)
10536
10537 this.d = d
10538 this.pub = new ECPubKey(Q, compressed)
10539 }
10540
10541 // Constants
10542 ECKey.curve = secp256k1
10543
10544 // Static constructors
10545 ECKey.fromWIF = function (string) {
10546 var payload = base58check.decode(string)
10547 var compressed = false
10548
10549 // Ignore the version byte
10550 payload = payload.slice(1)
10551
10552 if (payload.length === 33) {
10553 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10554
10555 // Truncate the compression flag
10556 payload = payload.slice(0, -1)
10557 compressed = true
10558 }
10559
10560 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10561
10562 var d = BigInteger.fromBuffer(payload)
10563 return new ECKey(d, compressed)
10564 }
10565
10566 ECKey.makeRandom = function (compressed, rng) {
10567 rng = rng || randomBytes
10568
10569 var buffer = rng(32)
10570 typeForce('Buffer', buffer)
10571 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10572
10573 var d = BigInteger.fromBuffer(buffer)
10574 d = d.mod(ECKey.curve.n)
10575
10576 return new ECKey(d, compressed)
10577 }
10578
10579 // Export functions
10580 ECKey.prototype.toWIF = function (network) {
10581 network = network || networks.bitcoin
10582
10583 var bufferLen = this.pub.compressed ? 34 : 33
10584 var buffer = new Buffer(bufferLen)
10585
10586 buffer.writeUInt8(network.wif, 0)
10587 this.d.toBuffer(32).copy(buffer, 1)
10588
10589 if (this.pub.compressed) {
10590 buffer.writeUInt8(0x01, 33)
10591 }
10592
10593 return base58check.encode(buffer)
10594 }
10595
10596 // Operations
10597 ECKey.prototype.sign = function (hash) {
10598 return ecdsa.sign(ECKey.curve, hash, this.d)
10599 }
10600
10601 module.exports = ECKey
10602
10603 }).call(this,require("buffer").Buffer)
10604 },{"./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){
10605 (function (Buffer){
10606 var crypto = require('./crypto')
10607 var ecdsa = require('./ecdsa')
10608 var typeForce = require('typeforce')
10609 var networks = require('./networks')
10610
10611 var Address = require('./address')
10612
10613 var ecurve = require('ecurve')
10614 var secp256k1 = ecurve.getCurveByName('secp256k1')
10615
10616 function ECPubKey (Q, compressed) {
10617 if (compressed === undefined) {
10618 compressed = true
10619 }
10620
10621 typeForce('Point', Q)
10622 typeForce('Boolean', compressed)
10623
10624 this.compressed = compressed
10625 this.Q = Q
10626 }
10627
10628 // Constants
10629 ECPubKey.curve = secp256k1
10630
10631 // Static constructors
10632 ECPubKey.fromBuffer = function (buffer) {
10633 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10634 return new ECPubKey(Q, Q.compressed)
10635 }
10636
10637 ECPubKey.fromHex = function (hex) {
10638 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10639 }
10640
10641 // Operations
10642 ECPubKey.prototype.getAddress = function (network) {
10643 network = network || networks.bitcoin
10644
10645 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10646 }
10647
10648 ECPubKey.prototype.verify = function (hash, signature) {
10649 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10650 }
10651
10652 // Export functions
10653 ECPubKey.prototype.toBuffer = function () {
10654 return this.Q.getEncoded(this.compressed)
10655 }
10656
10657 ECPubKey.prototype.toHex = function () {
10658 return this.toBuffer().toString('hex')
10659 }
10660
10661 module.exports = ECPubKey
10662
10663 }).call(this,require("buffer").Buffer)
10664 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10665 (function (Buffer){
10666 var assert = require('assert')
10667 var typeForce = require('typeforce')
10668
10669 var BigInteger = require('bigi')
10670
10671 function ECSignature (r, s) {
10672 typeForce('BigInteger', r)
10673 typeForce('BigInteger', s)
10674
10675 this.r = r
10676 this.s = s
10677 }
10678
10679 ECSignature.parseCompact = function (buffer) {
10680 assert.equal(buffer.length, 65, 'Invalid signature length')
10681 var i = buffer.readUInt8(0) - 27
10682
10683 // At most 3 bits
10684 assert.equal(i, i & 7, 'Invalid signature parameter')
10685 var compressed = !!(i & 4)
10686
10687 // Recovery param only
10688 i = i & 3
10689
10690 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10691 var s = BigInteger.fromBuffer(buffer.slice(33))
10692
10693 return {
10694 compressed: compressed,
10695 i: i,
10696 signature: new ECSignature(r, s)
10697 }
10698 }
10699
10700 ECSignature.fromDER = function (buffer) {
10701 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10702 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10703 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10704
10705 var rLen = buffer.readUInt8(3)
10706 assert(rLen > 0, 'R length is zero')
10707
10708 var offset = 4 + rLen
10709 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10710
10711 var sLen = buffer.readUInt8(offset + 1)
10712 assert(sLen > 0, 'S length is zero')
10713
10714 var rB = buffer.slice(4, offset)
10715 var sB = buffer.slice(offset + 2)
10716 offset += 2 + sLen
10717
10718 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10719 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10720 }
10721
10722 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10723 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10724 }
10725
10726 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10727 var r = BigInteger.fromDERInteger(rB)
10728 var s = BigInteger.fromDERInteger(sB)
10729
10730 assert(r.signum() >= 0, 'R value is negative')
10731 assert(s.signum() >= 0, 'S value is negative')
10732
10733 return new ECSignature(r, s)
10734 }
10735
10736 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10737 ECSignature.parseScriptSignature = function (buffer) {
10738 var hashType = buffer.readUInt8(buffer.length - 1)
10739 var hashTypeMod = hashType & ~0x80
10740
10741 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10742
10743 return {
10744 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10745 hashType: hashType
10746 }
10747 }
10748
10749 ECSignature.prototype.toCompact = function (i, compressed) {
10750 if (compressed) {
10751 i += 4
10752 }
10753
10754 i += 27
10755
10756 var buffer = new Buffer(65)
10757 buffer.writeUInt8(i, 0)
10758
10759 this.r.toBuffer(32).copy(buffer, 1)
10760 this.s.toBuffer(32).copy(buffer, 33)
10761
10762 return buffer
10763 }
10764
10765 ECSignature.prototype.toDER = function () {
10766 var rBa = this.r.toDERInteger()
10767 var sBa = this.s.toDERInteger()
10768
10769 var sequence = []
10770
10771 // INTEGER
10772 sequence.push(0x02, rBa.length)
10773 sequence = sequence.concat(rBa)
10774
10775 // INTEGER
10776 sequence.push(0x02, sBa.length)
10777 sequence = sequence.concat(sBa)
10778
10779 // SEQUENCE
10780 sequence.unshift(0x30, sequence.length)
10781
10782 return new Buffer(sequence)
10783 }
10784
10785 ECSignature.prototype.toScriptSignature = function (hashType) {
10786 var hashTypeMod = hashType & ~0x80
10787 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10788
10789 var hashTypeBuffer = new Buffer(1)
10790 hashTypeBuffer.writeUInt8(hashType, 0)
10791
10792 return Buffer.concat([this.toDER(), hashTypeBuffer])
10793 }
10794
10795 module.exports = ECSignature
10796
10797 }).call(this,require("buffer").Buffer)
10798 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
10799 (function (Buffer){
10800 var assert = require('assert')
10801 var base58check = require('bs58check')
10802 var bcrypto = require('./crypto')
10803 var createHmac = require('create-hmac')
10804 var typeForce = require('typeforce')
10805 var networks = require('./networks')
10806
10807 var BigInteger = require('bigi')
10808 var ECKey = require('./eckey')
10809 var ECPubKey = require('./ecpubkey')
10810
10811 var ecurve = require('ecurve')
10812 var curve = ecurve.getCurveByName('secp256k1')
10813
10814 function findBIP32NetworkByVersion (version) {
10815 for (var name in networks) {
10816 var network = networks[name]
10817
10818 if (version === network.bip32.private || version === network.bip32.public) {
10819 return network
10820 }
10821 }
10822
10823 assert(false, 'Could not find network for ' + version.toString(16))
10824 }
10825
10826 function HDNode (K, chainCode, network) {
10827 network = network || networks.bitcoin
10828
10829 typeForce('Buffer', chainCode)
10830
10831 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
10832 assert(network.bip32, 'Unknown BIP32 constants for network')
10833
10834 this.chainCode = chainCode
10835 this.depth = 0
10836 this.index = 0
10837 this.parentFingerprint = 0x00000000
10838 this.network = network
10839
10840 if (K instanceof BigInteger) {
10841 this.privKey = new ECKey(K, true)
10842 this.pubKey = this.privKey.pub
10843 } else if (K instanceof ECKey) {
10844 assert(K.pub.compressed, 'ECKey must be compressed')
10845 this.privKey = K
10846 this.pubKey = K.pub
10847 } else if (K instanceof ECPubKey) {
10848 assert(K.compressed, 'ECPubKey must be compressed')
10849 this.pubKey = K
10850 } else {
10851 this.pubKey = new ECPubKey(K, true)
10852 }
10853 }
10854
10855 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10856 HDNode.HIGHEST_BIT = 0x80000000
10857 HDNode.LENGTH = 78
10858
10859 HDNode.fromSeedBuffer = function (seed, network) {
10860 typeForce('Buffer', seed)
10861
10862 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10863 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10864
10865 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10866 var IL = I.slice(0, 32)
10867 var IR = I.slice(32)
10868
10869 // In case IL is 0 or >= n, the master key is invalid
10870 // This is handled by `new ECKey` in the HDNode constructor
10871 var pIL = BigInteger.fromBuffer(IL)
10872
10873 return new HDNode(pIL, IR, network)
10874 }
10875
10876 HDNode.fromSeedHex = function (hex, network) {
10877 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10878 }
10879
10880 HDNode.fromBase58 = function (string, network) {
10881 return HDNode.fromBuffer(base58check.decode(string), network, true)
10882 }
10883
10884 // FIXME: remove in 2.x.y
10885 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10886 if (!__ignoreDeprecation) {
10887 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10888 }
10889
10890 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10891
10892 // 4 byte: version bytes
10893 var version = buffer.readUInt32BE(0)
10894
10895 if (network) {
10896 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10897
10898 // auto-detect
10899 } else {
10900 network = findBIP32NetworkByVersion(version)
10901 }
10902
10903 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10904 var depth = buffer.readUInt8(4)
10905
10906 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10907 var parentFingerprint = buffer.readUInt32BE(5)
10908 if (depth === 0) {
10909 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10910 }
10911
10912 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10913 // This is encoded in MSB order. (0x00000000 if master key)
10914 var index = buffer.readUInt32BE(9)
10915 assert(depth > 0 || index === 0, 'Invalid index')
10916
10917 // 32 bytes: the chain code
10918 var chainCode = buffer.slice(13, 45)
10919 var data, hd
10920
10921 // 33 bytes: private key data (0x00 + k)
10922 if (version === network.bip32.private) {
10923 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
10924 data = buffer.slice(46, 78)
10925 var d = BigInteger.fromBuffer(data)
10926 hd = new HDNode(d, chainCode, network)
10927
10928 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10929 } else {
10930 data = buffer.slice(45, 78)
10931 var Q = ecurve.Point.decodeFrom(curve, data)
10932 assert.equal(Q.compressed, true, 'Invalid public key')
10933
10934 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10935 // If not, the extended public key is invalid.
10936 curve.validate(Q)
10937
10938 hd = new HDNode(Q, chainCode, network)
10939 }
10940
10941 hd.depth = depth
10942 hd.index = index
10943 hd.parentFingerprint = parentFingerprint
10944
10945 return hd
10946 }
10947
10948 // FIXME: remove in 2.x.y
10949 HDNode.fromHex = function (hex, network) {
10950 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10951 }
10952
10953 HDNode.prototype.getIdentifier = function () {
10954 return bcrypto.hash160(this.pubKey.toBuffer())
10955 }
10956
10957 HDNode.prototype.getFingerprint = function () {
10958 return this.getIdentifier().slice(0, 4)
10959 }
10960
10961 HDNode.prototype.getAddress = function () {
10962 return this.pubKey.getAddress(this.network)
10963 }
10964
10965 HDNode.prototype.neutered = function () {
10966 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10967 neutered.depth = this.depth
10968 neutered.index = this.index
10969 neutered.parentFingerprint = this.parentFingerprint
10970
10971 return neutered
10972 }
10973
10974 HDNode.prototype.toBase58 = function (isPrivate) {
10975 return base58check.encode(this.toBuffer(isPrivate, true))
10976 }
10977
10978 // FIXME: remove in 2.x.y
10979 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10980 if (isPrivate === undefined) {
10981 isPrivate = !!this.privKey
10982
10983 // FIXME: remove in 2.x.y
10984 } else {
10985 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10986 }
10987
10988 if (!__ignoreDeprecation) {
10989 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10990 }
10991
10992 // Version
10993 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10994 var buffer = new Buffer(HDNode.LENGTH)
10995
10996 // 4 bytes: version bytes
10997 buffer.writeUInt32BE(version, 0)
10998
10999 // Depth
11000 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11001 buffer.writeUInt8(this.depth, 4)
11002
11003 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11004 buffer.writeUInt32BE(this.parentFingerprint, 5)
11005
11006 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11007 // This is encoded in Big endian. (0x00000000 if master key)
11008 buffer.writeUInt32BE(this.index, 9)
11009
11010 // 32 bytes: the chain code
11011 this.chainCode.copy(buffer, 13)
11012
11013 // 33 bytes: the public key or private key data
11014 if (isPrivate) {
11015 // FIXME: remove in 2.x.y
11016 assert(this.privKey, 'Missing private key')
11017
11018 // 0x00 + k for private keys
11019 buffer.writeUInt8(0, 45)
11020 this.privKey.d.toBuffer(32).copy(buffer, 46)
11021 } else {
11022 // X9.62 encoding for public keys
11023 this.pubKey.toBuffer().copy(buffer, 45)
11024 }
11025
11026 return buffer
11027 }
11028
11029 // FIXME: remove in 2.x.y
11030 HDNode.prototype.toHex = function (isPrivate) {
11031 return this.toBuffer(isPrivate).toString('hex')
11032 }
11033
11034 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11035 HDNode.prototype.derive = function (index) {
11036 var isHardened = index >= HDNode.HIGHEST_BIT
11037 var indexBuffer = new Buffer(4)
11038 indexBuffer.writeUInt32BE(index, 0)
11039
11040 var data
11041
11042 // Hardened child
11043 if (isHardened) {
11044 assert(this.privKey, 'Could not derive hardened child key')
11045
11046 // data = 0x00 || ser256(kpar) || ser32(index)
11047 data = Buffer.concat([
11048 this.privKey.d.toBuffer(33),
11049 indexBuffer
11050 ])
11051
11052 // Normal child
11053 } else {
11054 // data = serP(point(kpar)) || ser32(index)
11055 // = serP(Kpar) || ser32(index)
11056 data = Buffer.concat([
11057 this.pubKey.toBuffer(),
11058 indexBuffer
11059 ])
11060 }
11061
11062 var I = createHmac('sha512', this.chainCode).update(data).digest()
11063 var IL = I.slice(0, 32)
11064 var IR = I.slice(32)
11065
11066 var pIL = BigInteger.fromBuffer(IL)
11067
11068 // In case parse256(IL) >= n, proceed with the next value for i
11069 if (pIL.compareTo(curve.n) >= 0) {
11070 return this.derive(index + 1)
11071 }
11072
11073 // Private parent key -> private child key
11074 var hd
11075 if (this.privKey) {
11076 // ki = parse256(IL) + kpar (mod n)
11077 var ki = pIL.add(this.privKey.d).mod(curve.n)
11078
11079 // In case ki == 0, proceed with the next value for i
11080 if (ki.signum() === 0) {
11081 return this.derive(index + 1)
11082 }
11083
11084 hd = new HDNode(ki, IR, this.network)
11085
11086 // Public parent key -> public child key
11087 } else {
11088 // Ki = point(parse256(IL)) + Kpar
11089 // = G*IL + Kpar
11090 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11091
11092 // In case Ki is the point at infinity, proceed with the next value for i
11093 if (curve.isInfinity(Ki)) {
11094 return this.derive(index + 1)
11095 }
11096
11097 hd = new HDNode(Ki, IR, this.network)
11098 }
11099
11100 hd.depth = this.depth + 1
11101 hd.index = index
11102 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11103
11104 return hd
11105 }
11106
11107 HDNode.prototype.deriveHardened = function (index) {
11108 // Only derives hardened private keys by default
11109 return this.derive(index + HDNode.HIGHEST_BIT)
11110 }
11111
11112 HDNode.prototype.toString = HDNode.prototype.toBase58
11113
11114 module.exports = HDNode
11115
11116 }).call(this,require("buffer").Buffer)
11117 },{"./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){
11118 module.exports = {
11119 Address: require('./address'),
11120 base58check: require('./base58check'),
11121 Block: require('./block'),
11122 bufferutils: require('./bufferutils'),
11123 crypto: require('./crypto'),
11124 ecdsa: require('./ecdsa'),
11125 ECKey: require('./eckey'),
11126 ECPubKey: require('./ecpubkey'),
11127 ECSignature: require('./ecsignature'),
11128 Message: require('./message'),
11129 opcodes: require('./opcodes'),
11130 HDNode: require('./hdnode'),
11131 Script: require('./script'),
11132 scripts: require('./scripts'),
11133 Transaction: require('./transaction'),
11134 TransactionBuilder: require('./transaction_builder'),
11135 networks: require('./networks'),
11136 Wallet: require('./wallet')
11137 }
11138
11139 },{"./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){
11140 (function (Buffer){
11141 var bufferutils = require('./bufferutils')
11142 var crypto = require('./crypto')
11143 var ecdsa = require('./ecdsa')
11144 var networks = require('./networks')
11145
11146 var BigInteger = require('bigi')
11147 var ECPubKey = require('./ecpubkey')
11148 var ECSignature = require('./ecsignature')
11149
11150 var ecurve = require('ecurve')
11151 var ecparams = ecurve.getCurveByName('secp256k1')
11152
11153 function magicHash (message, network) {
11154 var magicPrefix = new Buffer(network.magicPrefix)
11155 var messageBuffer = new Buffer(message)
11156 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11157
11158 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11159 return crypto.hash256(buffer)
11160 }
11161
11162 function sign (privKey, message, network) {
11163 network = network || networks.bitcoin
11164
11165 var hash = magicHash(message, network)
11166 var signature = privKey.sign(hash)
11167 var e = BigInteger.fromBuffer(hash)
11168 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11169
11170 return signature.toCompact(i, privKey.pub.compressed)
11171 }
11172
11173 // TODO: network could be implied from address
11174 function verify (address, signature, message, network) {
11175 if (!Buffer.isBuffer(signature)) {
11176 signature = new Buffer(signature, 'base64')
11177 }
11178
11179 network = network || networks.bitcoin
11180
11181 var hash = magicHash(message, network)
11182 var parsed = ECSignature.parseCompact(signature)
11183 var e = BigInteger.fromBuffer(hash)
11184 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11185
11186 var pubKey = new ECPubKey(Q, parsed.compressed)
11187 return pubKey.getAddress(network).toString() === address.toString()
11188 }
11189
11190 module.exports = {
11191 magicHash: magicHash,
11192 sign: sign,
11193 verify: verify
11194 }
11195
11196 }).call(this,require("buffer").Buffer)
11197 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11198 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11199 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11200
11201 var networks = {
11202 bitcoin: {
11203 magicPrefix: '\x18Bitcoin Signed Message:\n',
11204 bip32: {
11205 public: 0x0488b21e,
11206 private: 0x0488ade4
11207 },
11208 pubKeyHash: 0x00,
11209 scriptHash: 0x05,
11210 wif: 0x80,
11211 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11212 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11213 estimateFee: estimateFee('bitcoin')
11214 },
11215 testnet: {
11216 magicPrefix: '\x18Bitcoin Signed Message:\n',
11217 bip32: {
11218 public: 0x043587cf,
11219 private: 0x04358394
11220 },
11221 pubKeyHash: 0x6f,
11222 scriptHash: 0xc4,
11223 wif: 0xef,
11224 dustThreshold: 546,
11225 feePerKb: 10000,
11226 estimateFee: estimateFee('testnet')
11227 },
11228 litecoin: {
11229 magicPrefix: '\x19Litecoin Signed Message:\n',
11230 bip32: {
11231 public: 0x019da462,
11232 private: 0x019d9cfe
11233 },
11234 pubKeyHash: 0x30,
11235 scriptHash: 0x05,
11236 wif: 0xb0,
11237 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11238 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11239 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11240 estimateFee: estimateFee('litecoin')
11241 },
11242 dogecoin: {
11243 magicPrefix: '\x19Dogecoin Signed Message:\n',
11244 bip32: {
11245 public: 0x02facafd,
11246 private: 0x02fac398
11247 },
11248 pubKeyHash: 0x1e,
11249 scriptHash: 0x16,
11250 wif: 0x9e,
11251 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11252 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11253 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11254 estimateFee: estimateFee('dogecoin')
11255 },
11256 viacoin: {
11257 magicPrefix: '\x18Viacoin Signed Message:\n',
11258 bip32: {
11259 public: 0x0488b21e,
11260 private: 0x0488ade4
11261 },
11262 pubKeyHash: 0x47,
11263 scriptHash: 0x21,
11264 wif: 0xc7,
11265 dustThreshold: 560,
11266 dustSoftThreshold: 100000,
11267 feePerKb: 100000, //
11268 estimateFee: estimateFee('viacoin')
11269 },
11270 viacointestnet: {
11271 magicPrefix: '\x18Viacoin Signed Message:\n',
11272 bip32: {
11273 public: 0x043587cf,
11274 private: 0x04358394
11275 },
11276 pubKeyHash: 0x7f,
11277 scriptHash: 0xc4,
11278 wif: 0xff,
11279 dustThreshold: 560,
11280 dustSoftThreshold: 100000,
11281 feePerKb: 100000,
11282 estimateFee: estimateFee('viacointestnet')
11283 },
11284 gamerscoin: {
11285 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11286 bip32: {
11287 public: 0x019da462,
11288 private: 0x019d9cfe
11289 },
11290 pubKeyHash: 0x26,
11291 scriptHash: 0x05,
11292 wif: 0xA6,
11293 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11294 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11295 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11296 estimateFee: estimateFee('gamerscoin')
11297 },
11298 jumbucks: {
11299 magicPrefix: '\x19Jumbucks Signed Message:\n',
11300 bip32: {
11301 public: 0x037a689a,
11302 private: 0x037a6460
11303 },
11304 pubKeyHash: 0x2b,
11305 scriptHash: 0x05,
11306 wif: 0xab,
11307 dustThreshold: 0,
11308 dustSoftThreshold: 10000,
11309 feePerKb: 10000,
11310 estimateFee: estimateFee('jumbucks')
11311 },
11312 zetacoin: {
11313 magicPrefix: '\x18Zetacoin Signed Message:\n',
11314 bip32: {
11315 public: 0x0488b21e,
11316 private: 0x0488ade4
11317 },
11318 pubKeyHash: 0x50,
11319 scriptHash: 0x09,
11320 wif: 0xe0,
11321 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11322 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11323 estimateFee: estimateFee('zetacoin')
11324 }
11325 }
11326
11327 function estimateFee (type) {
11328 return function (tx) {
11329 var network = networks[type]
11330 var baseFee = network.feePerKb
11331 var byteSize = tx.toBuffer().length
11332
11333 var fee = baseFee * Math.ceil(byteSize / 1000)
11334 if (network.dustSoftThreshold === undefined) return fee
11335
11336 tx.outs.forEach(function (e) {
11337 if (e.value < network.dustSoftThreshold) {
11338 fee += baseFee
11339 }
11340 })
11341
11342 return fee
11343 }
11344 }
11345
11346 module.exports = networks
11347
11348 },{}],67:[function(require,module,exports){
11349 module.exports = {
11350 // push value
11351 OP_FALSE: 0,
11352 OP_0: 0,
11353 OP_PUSHDATA1: 76,
11354 OP_PUSHDATA2: 77,
11355 OP_PUSHDATA4: 78,
11356 OP_1NEGATE: 79,
11357 OP_RESERVED: 80,
11358 OP_1: 81,
11359 OP_TRUE: 81,
11360 OP_2: 82,
11361 OP_3: 83,
11362 OP_4: 84,
11363 OP_5: 85,
11364 OP_6: 86,
11365 OP_7: 87,
11366 OP_8: 88,
11367 OP_9: 89,
11368 OP_10: 90,
11369 OP_11: 91,
11370 OP_12: 92,
11371 OP_13: 93,
11372 OP_14: 94,
11373 OP_15: 95,
11374 OP_16: 96,
11375
11376 // control
11377 OP_NOP: 97,
11378 OP_VER: 98,
11379 OP_IF: 99,
11380 OP_NOTIF: 100,
11381 OP_VERIF: 101,
11382 OP_VERNOTIF: 102,
11383 OP_ELSE: 103,
11384 OP_ENDIF: 104,
11385 OP_VERIFY: 105,
11386 OP_RETURN: 106,
11387
11388 // stack ops
11389 OP_TOALTSTACK: 107,
11390 OP_FROMALTSTACK: 108,
11391 OP_2DROP: 109,
11392 OP_2DUP: 110,
11393 OP_3DUP: 111,
11394 OP_2OVER: 112,
11395 OP_2ROT: 113,
11396 OP_2SWAP: 114,
11397 OP_IFDUP: 115,
11398 OP_DEPTH: 116,
11399 OP_DROP: 117,
11400 OP_DUP: 118,
11401 OP_NIP: 119,
11402 OP_OVER: 120,
11403 OP_PICK: 121,
11404 OP_ROLL: 122,
11405 OP_ROT: 123,
11406 OP_SWAP: 124,
11407 OP_TUCK: 125,
11408
11409 // splice ops
11410 OP_CAT: 126,
11411 OP_SUBSTR: 127,
11412 OP_LEFT: 128,
11413 OP_RIGHT: 129,
11414 OP_SIZE: 130,
11415
11416 // bit logic
11417 OP_INVERT: 131,
11418 OP_AND: 132,
11419 OP_OR: 133,
11420 OP_XOR: 134,
11421 OP_EQUAL: 135,
11422 OP_EQUALVERIFY: 136,
11423 OP_RESERVED1: 137,
11424 OP_RESERVED2: 138,
11425
11426 // numeric
11427 OP_1ADD: 139,
11428 OP_1SUB: 140,
11429 OP_2MUL: 141,
11430 OP_2DIV: 142,
11431 OP_NEGATE: 143,
11432 OP_ABS: 144,
11433 OP_NOT: 145,
11434 OP_0NOTEQUAL: 146,
11435
11436 OP_ADD: 147,
11437 OP_SUB: 148,
11438 OP_MUL: 149,
11439 OP_DIV: 150,
11440 OP_MOD: 151,
11441 OP_LSHIFT: 152,
11442 OP_RSHIFT: 153,
11443
11444 OP_BOOLAND: 154,
11445 OP_BOOLOR: 155,
11446 OP_NUMEQUAL: 156,
11447 OP_NUMEQUALVERIFY: 157,
11448 OP_NUMNOTEQUAL: 158,
11449 OP_LESSTHAN: 159,
11450 OP_GREATERTHAN: 160,
11451 OP_LESSTHANOREQUAL: 161,
11452 OP_GREATERTHANOREQUAL: 162,
11453 OP_MIN: 163,
11454 OP_MAX: 164,
11455
11456 OP_WITHIN: 165,
11457
11458 // crypto
11459 OP_RIPEMD160: 166,
11460 OP_SHA1: 167,
11461 OP_SHA256: 168,
11462 OP_HASH160: 169,
11463 OP_HASH256: 170,
11464 OP_CODESEPARATOR: 171,
11465 OP_CHECKSIG: 172,
11466 OP_CHECKSIGVERIFY: 173,
11467 OP_CHECKMULTISIG: 174,
11468 OP_CHECKMULTISIGVERIFY: 175,
11469
11470 // expansion
11471 OP_NOP1: 176,
11472 OP_NOP2: 177,
11473 OP_NOP3: 178,
11474 OP_NOP4: 179,
11475 OP_NOP5: 180,
11476 OP_NOP6: 181,
11477 OP_NOP7: 182,
11478 OP_NOP8: 183,
11479 OP_NOP9: 184,
11480 OP_NOP10: 185,
11481
11482 // template matching params
11483 OP_PUBKEYHASH: 253,
11484 OP_PUBKEY: 254,
11485 OP_INVALIDOPCODE: 255
11486 }
11487
11488 },{}],68:[function(require,module,exports){
11489 (function (Buffer){
11490 var assert = require('assert')
11491 var bufferutils = require('./bufferutils')
11492 var crypto = require('./crypto')
11493 var typeForce = require('typeforce')
11494 var opcodes = require('./opcodes')
11495
11496 function Script (buffer, chunks) {
11497 typeForce('Buffer', buffer)
11498 typeForce('Array', chunks)
11499
11500 this.buffer = buffer
11501 this.chunks = chunks
11502 }
11503
11504 Script.fromASM = function (asm) {
11505 var strChunks = asm.split(' ')
11506 var chunks = strChunks.map(function (strChunk) {
11507 // opcode
11508 if (strChunk in opcodes) {
11509 return opcodes[strChunk]
11510
11511 // data chunk
11512 } else {
11513 return new Buffer(strChunk, 'hex')
11514 }
11515 })
11516
11517 return Script.fromChunks(chunks)
11518 }
11519
11520 Script.fromBuffer = function (buffer) {
11521 var chunks = []
11522 var i = 0
11523
11524 while (i < buffer.length) {
11525 var opcode = buffer.readUInt8(i)
11526
11527 // data chunk
11528 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11529 var d = bufferutils.readPushDataInt(buffer, i)
11530
11531 // did reading a pushDataInt fail? return non-chunked script
11532 if (d === null) return new Script(buffer, [])
11533 i += d.size
11534
11535 // attempt to read too much data?
11536 if (i + d.number > buffer.length) return new Script(buffer, [])
11537
11538 var data = buffer.slice(i, i + d.number)
11539 i += d.number
11540
11541 chunks.push(data)
11542
11543 // opcode
11544 } else {
11545 chunks.push(opcode)
11546
11547 i += 1
11548 }
11549 }
11550
11551 return new Script(buffer, chunks)
11552 }
11553
11554 Script.fromChunks = function (chunks) {
11555 typeForce('Array', chunks)
11556
11557 var bufferSize = chunks.reduce(function (accum, chunk) {
11558 // data chunk
11559 if (Buffer.isBuffer(chunk)) {
11560 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11561 }
11562
11563 // opcode
11564 return accum + 1
11565 }, 0.0)
11566
11567 var buffer = new Buffer(bufferSize)
11568 var offset = 0
11569
11570 chunks.forEach(function (chunk) {
11571 // data chunk
11572 if (Buffer.isBuffer(chunk)) {
11573 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11574
11575 chunk.copy(buffer, offset)
11576 offset += chunk.length
11577
11578 // opcode
11579 } else {
11580 buffer.writeUInt8(chunk, offset)
11581 offset += 1
11582 }
11583 })
11584
11585 assert.equal(offset, buffer.length, 'Could not decode chunks')
11586 return new Script(buffer, chunks)
11587 }
11588
11589 Script.fromHex = function (hex) {
11590 return Script.fromBuffer(new Buffer(hex, 'hex'))
11591 }
11592
11593 Script.EMPTY = Script.fromChunks([])
11594
11595 Script.prototype.getHash = function () {
11596 return crypto.hash160(this.buffer)
11597 }
11598
11599 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11600 Script.prototype.without = function (needle) {
11601 return Script.fromChunks(this.chunks.filter(function (op) {
11602 return op !== needle
11603 }))
11604 }
11605
11606 var reverseOps = []
11607 for (var op in opcodes) {
11608 var code = opcodes[op]
11609 reverseOps[code] = op
11610 }
11611
11612 Script.prototype.toASM = function () {
11613 return this.chunks.map(function (chunk) {
11614 // data chunk
11615 if (Buffer.isBuffer(chunk)) {
11616 return chunk.toString('hex')
11617
11618 // opcode
11619 } else {
11620 return reverseOps[chunk]
11621 }
11622 }).join(' ')
11623 }
11624
11625 Script.prototype.toBuffer = function () {
11626 return this.buffer
11627 }
11628
11629 Script.prototype.toHex = function () {
11630 return this.toBuffer().toString('hex')
11631 }
11632
11633 module.exports = Script
11634
11635 }).call(this,require("buffer").Buffer)
11636 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11637 (function (Buffer){
11638 var assert = require('assert')
11639 var ops = require('./opcodes')
11640 var typeForce = require('typeforce')
11641
11642 var ecurve = require('ecurve')
11643 var curve = ecurve.getCurveByName('secp256k1')
11644
11645 var ECSignature = require('./ecsignature')
11646 var Script = require('./script')
11647
11648 function isCanonicalPubKey (buffer) {
11649 if (!Buffer.isBuffer(buffer)) return false
11650
11651 try {
11652 ecurve.Point.decodeFrom(curve, buffer)
11653 } catch (e) {
11654 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11655 throw e
11656
11657 return false
11658 }
11659
11660 return true
11661 }
11662
11663 function isCanonicalSignature (buffer) {
11664 if (!Buffer.isBuffer(buffer)) return false
11665
11666 try {
11667 ECSignature.parseScriptSignature(buffer)
11668 } catch (e) {
11669 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/))) {
11670 throw e
11671 }
11672
11673 return false
11674 }
11675
11676 return true
11677 }
11678
11679 function isPubKeyHashInput (script) {
11680 return script.chunks.length === 2 &&
11681 isCanonicalSignature(script.chunks[0]) &&
11682 isCanonicalPubKey(script.chunks[1])
11683 }
11684
11685 function isPubKeyHashOutput (script) {
11686 return script.chunks.length === 5 &&
11687 script.chunks[0] === ops.OP_DUP &&
11688 script.chunks[1] === ops.OP_HASH160 &&
11689 Buffer.isBuffer(script.chunks[2]) &&
11690 script.chunks[2].length === 20 &&
11691 script.chunks[3] === ops.OP_EQUALVERIFY &&
11692 script.chunks[4] === ops.OP_CHECKSIG
11693 }
11694
11695 function isPubKeyInput (script) {
11696 return script.chunks.length === 1 &&
11697 isCanonicalSignature(script.chunks[0])
11698 }
11699
11700 function isPubKeyOutput (script) {
11701 return script.chunks.length === 2 &&
11702 isCanonicalPubKey(script.chunks[0]) &&
11703 script.chunks[1] === ops.OP_CHECKSIG
11704 }
11705
11706 function isScriptHashInput (script, allowIncomplete) {
11707 if (script.chunks.length < 2) return false
11708
11709 var lastChunk = script.chunks[script.chunks.length - 1]
11710 if (!Buffer.isBuffer(lastChunk)) return false
11711
11712 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11713 var redeemScript = Script.fromBuffer(lastChunk)
11714
11715 // is redeemScript a valid script?
11716 if (redeemScript.chunks.length === 0) return false
11717
11718 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11719 }
11720
11721 function isScriptHashOutput (script) {
11722 return script.chunks.length === 3 &&
11723 script.chunks[0] === ops.OP_HASH160 &&
11724 Buffer.isBuffer(script.chunks[1]) &&
11725 script.chunks[1].length === 20 &&
11726 script.chunks[2] === ops.OP_EQUAL
11727 }
11728
11729 // allowIncomplete is to account for combining signatures
11730 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11731 function isMultisigInput (script, allowIncomplete) {
11732 if (script.chunks.length < 2) return false
11733 if (script.chunks[0] !== ops.OP_0) return false
11734
11735 if (allowIncomplete) {
11736 return script.chunks.slice(1).every(function (chunk) {
11737 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11738 })
11739 }
11740
11741 return script.chunks.slice(1).every(isCanonicalSignature)
11742 }
11743
11744 function isMultisigOutput (script) {
11745 if (script.chunks.length < 4) return false
11746 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11747
11748 var mOp = script.chunks[0]
11749 if (mOp === ops.OP_0) return false
11750 if (mOp < ops.OP_1) return false
11751 if (mOp > ops.OP_16) return false
11752
11753 var nOp = script.chunks[script.chunks.length - 2]
11754 if (nOp === ops.OP_0) return false
11755 if (nOp < ops.OP_1) return false
11756 if (nOp > ops.OP_16) return false
11757
11758 var m = mOp - (ops.OP_1 - 1)
11759 var n = nOp - (ops.OP_1 - 1)
11760 if (n < m) return false
11761
11762 var pubKeys = script.chunks.slice(1, -2)
11763 if (n < pubKeys.length) return false
11764
11765 return pubKeys.every(isCanonicalPubKey)
11766 }
11767
11768 function isNullDataOutput (script) {
11769 return script.chunks[0] === ops.OP_RETURN
11770 }
11771
11772 function classifyOutput (script) {
11773 typeForce('Script', script)
11774
11775 if (isPubKeyHashOutput(script)) {
11776 return 'pubkeyhash'
11777 } else if (isScriptHashOutput(script)) {
11778 return 'scripthash'
11779 } else if (isMultisigOutput(script)) {
11780 return 'multisig'
11781 } else if (isPubKeyOutput(script)) {
11782 return 'pubkey'
11783 } else if (isNullDataOutput(script)) {
11784 return 'nulldata'
11785 }
11786
11787 return 'nonstandard'
11788 }
11789
11790 function classifyInput (script, allowIncomplete) {
11791 typeForce('Script', script)
11792
11793 if (isPubKeyHashInput(script)) {
11794 return 'pubkeyhash'
11795 } else if (isMultisigInput(script, allowIncomplete)) {
11796 return 'multisig'
11797 } else if (isScriptHashInput(script, allowIncomplete)) {
11798 return 'scripthash'
11799 } else if (isPubKeyInput(script)) {
11800 return 'pubkey'
11801 }
11802
11803 return 'nonstandard'
11804 }
11805
11806 // Standard Script Templates
11807 // {pubKey} OP_CHECKSIG
11808 function pubKeyOutput (pubKey) {
11809 return Script.fromChunks([
11810 pubKey.toBuffer(),
11811 ops.OP_CHECKSIG
11812 ])
11813 }
11814
11815 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11816 function pubKeyHashOutput (hash) {
11817 typeForce('Buffer', hash)
11818
11819 return Script.fromChunks([
11820 ops.OP_DUP,
11821 ops.OP_HASH160,
11822 hash,
11823 ops.OP_EQUALVERIFY,
11824 ops.OP_CHECKSIG
11825 ])
11826 }
11827
11828 // OP_HASH160 {scriptHash} OP_EQUAL
11829 function scriptHashOutput (hash) {
11830 typeForce('Buffer', hash)
11831
11832 return Script.fromChunks([
11833 ops.OP_HASH160,
11834 hash,
11835 ops.OP_EQUAL
11836 ])
11837 }
11838
11839 // m [pubKeys ...] n OP_CHECKMULTISIG
11840 function multisigOutput (m, pubKeys) {
11841 typeForce(['ECPubKey'], pubKeys)
11842
11843 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11844
11845 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11846 return pubKey.toBuffer()
11847 })
11848 var n = pubKeys.length
11849
11850 return Script.fromChunks([].concat(
11851 (ops.OP_1 - 1) + m,
11852 pubKeyBuffers,
11853 (ops.OP_1 - 1) + n,
11854 ops.OP_CHECKMULTISIG
11855 ))
11856 }
11857
11858 // {signature}
11859 function pubKeyInput (signature) {
11860 typeForce('Buffer', signature)
11861
11862 return Script.fromChunks([signature])
11863 }
11864
11865 // {signature} {pubKey}
11866 function pubKeyHashInput (signature, pubKey) {
11867 typeForce('Buffer', signature)
11868
11869 return Script.fromChunks([signature, pubKey.toBuffer()])
11870 }
11871
11872 // <scriptSig> {serialized scriptPubKey script}
11873 function scriptHashInput (scriptSig, scriptPubKey) {
11874 return Script.fromChunks([].concat(
11875 scriptSig.chunks,
11876 scriptPubKey.toBuffer()
11877 ))
11878 }
11879
11880 // OP_0 [signatures ...]
11881 function multisigInput (signatures, scriptPubKey) {
11882 if (scriptPubKey) {
11883 assert(isMultisigOutput(scriptPubKey))
11884
11885 var mOp = scriptPubKey.chunks[0]
11886 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11887 var m = mOp - (ops.OP_1 - 1)
11888 var n = nOp - (ops.OP_1 - 1)
11889
11890 assert(signatures.length >= m, 'Not enough signatures provided')
11891 assert(signatures.length <= n, 'Too many signatures provided')
11892 }
11893
11894 return Script.fromChunks([].concat(ops.OP_0, signatures))
11895 }
11896
11897 function nullDataOutput (data) {
11898 return Script.fromChunks([ops.OP_RETURN, data])
11899 }
11900
11901 module.exports = {
11902 isCanonicalPubKey: isCanonicalPubKey,
11903 isCanonicalSignature: isCanonicalSignature,
11904 isPubKeyHashInput: isPubKeyHashInput,
11905 isPubKeyHashOutput: isPubKeyHashOutput,
11906 isPubKeyInput: isPubKeyInput,
11907 isPubKeyOutput: isPubKeyOutput,
11908 isScriptHashInput: isScriptHashInput,
11909 isScriptHashOutput: isScriptHashOutput,
11910 isMultisigInput: isMultisigInput,
11911 isMultisigOutput: isMultisigOutput,
11912 isNullDataOutput: isNullDataOutput,
11913 classifyOutput: classifyOutput,
11914 classifyInput: classifyInput,
11915 pubKeyOutput: pubKeyOutput,
11916 pubKeyHashOutput: pubKeyHashOutput,
11917 scriptHashOutput: scriptHashOutput,
11918 multisigOutput: multisigOutput,
11919 pubKeyInput: pubKeyInput,
11920 pubKeyHashInput: pubKeyHashInput,
11921 scriptHashInput: scriptHashInput,
11922 multisigInput: multisigInput,
11923 dataOutput: function (data) {
11924 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11925 return nullDataOutput(data)
11926 },
11927 nullDataOutput: nullDataOutput
11928 }
11929
11930 }).call(this,require("buffer").Buffer)
11931 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
11932 (function (Buffer){
11933 var assert = require('assert')
11934 var bufferutils = require('./bufferutils')
11935 var crypto = require('./crypto')
11936 var typeForce = require('typeforce')
11937 var opcodes = require('./opcodes')
11938 var scripts = require('./scripts')
11939
11940 var Address = require('./address')
11941 var ECSignature = require('./ecsignature')
11942 var Script = require('./script')
11943
11944 function Transaction () {
11945 this.version = 1
11946 this.locktime = 0
11947 this.ins = []
11948 this.outs = []
11949 }
11950
11951 Transaction.DEFAULT_SEQUENCE = 0xffffffff
11952 Transaction.SIGHASH_ALL = 0x01
11953 Transaction.SIGHASH_NONE = 0x02
11954 Transaction.SIGHASH_SINGLE = 0x03
11955 Transaction.SIGHASH_ANYONECANPAY = 0x80
11956
11957 Transaction.fromBuffer = function (buffer, __disableAssert) {
11958 var offset = 0
11959 function readSlice (n) {
11960 offset += n
11961 return buffer.slice(offset - n, offset)
11962 }
11963
11964 function readUInt32 () {
11965 var i = buffer.readUInt32LE(offset)
11966 offset += 4
11967 return i
11968 }
11969
11970 function readUInt64 () {
11971 var i = bufferutils.readUInt64LE(buffer, offset)
11972 offset += 8
11973 return i
11974 }
11975
11976 function readVarInt () {
11977 var vi = bufferutils.readVarInt(buffer, offset)
11978 offset += vi.size
11979 return vi.number
11980 }
11981
11982 function readScript () {
11983 return Script.fromBuffer(readSlice(readVarInt()))
11984 }
11985
11986 function readGenerationScript () {
11987 return new Script(readSlice(readVarInt()), [])
11988 }
11989
11990 var tx = new Transaction()
11991 tx.version = readUInt32()
11992
11993 var vinLen = readVarInt()
11994 for (var i = 0; i < vinLen; ++i) {
11995 var hash = readSlice(32)
11996
11997 if (Transaction.isCoinbaseHash(hash)) {
11998 tx.ins.push({
11999 hash: hash,
12000 index: readUInt32(),
12001 script: readGenerationScript(),
12002 sequence: readUInt32()
12003 })
12004 } else {
12005 tx.ins.push({
12006 hash: hash,
12007 index: readUInt32(),
12008 script: readScript(),
12009 sequence: readUInt32()
12010 })
12011 }
12012 }
12013
12014 var voutLen = readVarInt()
12015 for (i = 0; i < voutLen; ++i) {
12016 tx.outs.push({
12017 value: readUInt64(),
12018 script: readScript()
12019 })
12020 }
12021
12022 tx.locktime = readUInt32()
12023
12024 if (!__disableAssert) {
12025 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12026 }
12027
12028 return tx
12029 }
12030
12031 Transaction.fromHex = function (hex) {
12032 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12033 }
12034
12035 Transaction.isCoinbaseHash = function (buffer) {
12036 return Array.prototype.every.call(buffer, function (x) {
12037 return x === 0
12038 })
12039 }
12040
12041 /**
12042 * Create a new txIn.
12043 *
12044 * Can be called with any of:
12045 *
12046 * - A transaction and an index
12047 * - A transaction hash and an index
12048 *
12049 * Note that this method does not sign the created input.
12050 */
12051 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12052 if (sequence === undefined || sequence === null) {
12053 sequence = Transaction.DEFAULT_SEQUENCE
12054 }
12055
12056 script = script || Script.EMPTY
12057
12058 if (typeof hash === 'string') {
12059 // TxId hex is big-endian, we need little-endian
12060 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12061 } else if (hash instanceof Transaction) {
12062 hash = hash.getHash()
12063 }
12064
12065 typeForce('Buffer', hash)
12066 typeForce('Number', index)
12067 typeForce('Number', sequence)
12068 typeForce('Script', script)
12069
12070 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12071
12072 // Add the input and return the input's index
12073 return (this.ins.push({
12074 hash: hash,
12075 index: index,
12076 script: script,
12077 sequence: sequence
12078 }) - 1)
12079 }
12080
12081 /**
12082 * Create a new txOut.
12083 *
12084 * Can be called with:
12085 *
12086 * - A base58 address string and a value
12087 * - An Address object and a value
12088 * - A scriptPubKey Script and a value
12089 */
12090 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12091 // Attempt to get a valid address if it's a base58 address string
12092 if (typeof scriptPubKey === 'string') {
12093 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12094 }
12095
12096 // Attempt to get a valid script if it's an Address object
12097 if (scriptPubKey instanceof Address) {
12098 scriptPubKey = scriptPubKey.toOutputScript()
12099 }
12100
12101 typeForce('Script', scriptPubKey)
12102 typeForce('Number', value)
12103
12104 // Add the output and return the output's index
12105 return (this.outs.push({
12106 script: scriptPubKey,
12107 value: value
12108 }) - 1)
12109 }
12110
12111 Transaction.prototype.clone = function () {
12112 var newTx = new Transaction()
12113 newTx.version = this.version
12114 newTx.locktime = this.locktime
12115
12116 newTx.ins = this.ins.map(function (txIn) {
12117 return {
12118 hash: txIn.hash,
12119 index: txIn.index,
12120 script: txIn.script,
12121 sequence: txIn.sequence
12122 }
12123 })
12124
12125 newTx.outs = this.outs.map(function (txOut) {
12126 return {
12127 script: txOut.script,
12128 value: txOut.value
12129 }
12130 })
12131
12132 return newTx
12133 }
12134
12135 /**
12136 * Hash transaction for signing a specific input.
12137 *
12138 * Bitcoin uses a different hash for each signed transaction input. This
12139 * method copies the transaction, makes the necessary changes based on the
12140 * hashType, serializes and finally hashes the result. This hash can then be
12141 * used to sign the transaction input in question.
12142 */
12143 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12144 // FIXME: remove in 2.x.y
12145 if (arguments[0] instanceof Script) {
12146 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12147
12148 // swap the arguments (must be stored in tmp, arguments is special)
12149 var tmp = arguments[0]
12150 inIndex = arguments[1]
12151 prevOutScript = tmp
12152 }
12153
12154 typeForce('Number', inIndex)
12155 typeForce('Script', prevOutScript)
12156 typeForce('Number', hashType)
12157
12158 assert(inIndex >= 0, 'Invalid vin index')
12159 assert(inIndex < this.ins.length, 'Invalid vin index')
12160
12161 var txTmp = this.clone()
12162 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12163
12164 // Blank out other inputs' signatures
12165 txTmp.ins.forEach(function (txIn) {
12166 txIn.script = Script.EMPTY
12167 })
12168 txTmp.ins[inIndex].script = hashScript
12169
12170 var hashTypeModifier = hashType & 0x1f
12171
12172 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12173 assert(false, 'SIGHASH_NONE not yet supported')
12174 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12175 assert(false, 'SIGHASH_SINGLE not yet supported')
12176 }
12177
12178 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12179 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12180 }
12181
12182 var hashTypeBuffer = new Buffer(4)
12183 hashTypeBuffer.writeInt32LE(hashType, 0)
12184
12185 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12186 return crypto.hash256(buffer)
12187 }
12188
12189 Transaction.prototype.getHash = function () {
12190 return crypto.hash256(this.toBuffer())
12191 }
12192
12193 Transaction.prototype.getId = function () {
12194 // TxHash is little-endian, we need big-endian
12195 return bufferutils.reverse(this.getHash()).toString('hex')
12196 }
12197
12198 Transaction.prototype.toBuffer = function () {
12199 function scriptSize (script) {
12200 var length = script.buffer.length
12201
12202 return bufferutils.varIntSize(length) + length
12203 }
12204
12205 var buffer = new Buffer(
12206 8 +
12207 bufferutils.varIntSize(this.ins.length) +
12208 bufferutils.varIntSize(this.outs.length) +
12209 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12210 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12211 )
12212
12213 var offset = 0
12214 function writeSlice (slice) {
12215 slice.copy(buffer, offset)
12216 offset += slice.length
12217 }
12218
12219 function writeUInt32 (i) {
12220 buffer.writeUInt32LE(i, offset)
12221 offset += 4
12222 }
12223
12224 function writeUInt64 (i) {
12225 bufferutils.writeUInt64LE(buffer, i, offset)
12226 offset += 8
12227 }
12228
12229 function writeVarInt (i) {
12230 var n = bufferutils.writeVarInt(buffer, i, offset)
12231 offset += n
12232 }
12233
12234 writeUInt32(this.version)
12235 writeVarInt(this.ins.length)
12236
12237 this.ins.forEach(function (txIn) {
12238 writeSlice(txIn.hash)
12239 writeUInt32(txIn.index)
12240 writeVarInt(txIn.script.buffer.length)
12241 writeSlice(txIn.script.buffer)
12242 writeUInt32(txIn.sequence)
12243 })
12244
12245 writeVarInt(this.outs.length)
12246 this.outs.forEach(function (txOut) {
12247 writeUInt64(txOut.value)
12248 writeVarInt(txOut.script.buffer.length)
12249 writeSlice(txOut.script.buffer)
12250 })
12251
12252 writeUInt32(this.locktime)
12253
12254 return buffer
12255 }
12256
12257 Transaction.prototype.toHex = function () {
12258 return this.toBuffer().toString('hex')
12259 }
12260
12261 Transaction.prototype.setInputScript = function (index, script) {
12262 typeForce('Number', index)
12263 typeForce('Script', script)
12264
12265 this.ins[index].script = script
12266 }
12267
12268 // FIXME: remove in 2.x.y
12269 Transaction.prototype.sign = function (index, privKey, hashType) {
12270 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12271
12272 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12273 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12274
12275 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12276 this.setInputScript(index, scriptSig)
12277 }
12278
12279 // FIXME: remove in 2.x.y
12280 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12281 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12282
12283 hashType = hashType || Transaction.SIGHASH_ALL
12284
12285 var hash = this.hashForSignature(index, prevOutScript, hashType)
12286 var signature = privKey.sign(hash)
12287
12288 return signature.toScriptSignature(hashType)
12289 }
12290
12291 // FIXME: remove in 2.x.y
12292 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12293 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12294
12295 var parsed = ECSignature.parseScriptSignature(buffer)
12296 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12297
12298 return pubKey.verify(hash, parsed.signature)
12299 }
12300
12301 module.exports = Transaction
12302
12303 }).call(this,require("buffer").Buffer)
12304 },{"./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){
12305 (function (Buffer){
12306 var assert = require('assert')
12307 var ops = require('./opcodes')
12308 var scripts = require('./scripts')
12309
12310 var ECPubKey = require('./ecpubkey')
12311 var ECSignature = require('./ecsignature')
12312 var Script = require('./script')
12313 var Transaction = require('./transaction')
12314
12315 function extractInput (txIn) {
12316 var redeemScript
12317 var scriptSig = txIn.script
12318 var prevOutScript
12319 var prevOutType = scripts.classifyInput(scriptSig, true)
12320 var scriptType
12321
12322 // Re-classify if scriptHash
12323 if (prevOutType === 'scripthash') {
12324 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12325 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12326
12327 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12328 scriptType = scripts.classifyInput(scriptSig, true)
12329 } else {
12330 scriptType = prevOutType
12331 }
12332
12333 // Extract hashType, pubKeys and signatures
12334 var hashType, parsed, pubKeys, signatures
12335
12336 switch (scriptType) {
12337 case 'pubkeyhash': {
12338 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12339 hashType = parsed.hashType
12340 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12341 signatures = [parsed.signature]
12342 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12343
12344 break
12345 }
12346
12347 case 'pubkey': {
12348 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12349 hashType = parsed.hashType
12350 signatures = [parsed.signature]
12351
12352 if (redeemScript) {
12353 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12354 }
12355
12356 break
12357 }
12358
12359 case 'multisig': {
12360 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12361 if (chunk === ops.OP_0) return chunk
12362
12363 var parsed = ECSignature.parseScriptSignature(chunk)
12364 hashType = parsed.hashType
12365
12366 return parsed.signature
12367 })
12368
12369 if (redeemScript) {
12370 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12371 }
12372
12373 break
12374 }
12375 }
12376
12377 return {
12378 hashType: hashType,
12379 prevOutScript: prevOutScript,
12380 prevOutType: prevOutType,
12381 pubKeys: pubKeys,
12382 redeemScript: redeemScript,
12383 scriptType: scriptType,
12384 signatures: signatures
12385 }
12386 }
12387
12388 function TransactionBuilder () {
12389 this.prevTxMap = {}
12390 this.prevOutScripts = {}
12391 this.prevOutTypes = {}
12392
12393 this.inputs = []
12394 this.tx = new Transaction()
12395 }
12396
12397 TransactionBuilder.fromTransaction = function (transaction) {
12398 var txb = new TransactionBuilder()
12399
12400 // Copy other transaction fields
12401 txb.tx.version = transaction.version
12402 txb.tx.locktime = transaction.locktime
12403
12404 // Extract/add inputs
12405 transaction.ins.forEach(function (txIn) {
12406 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12407 })
12408
12409 // Extract/add outputs
12410 transaction.outs.forEach(function (txOut) {
12411 txb.addOutput(txOut.script, txOut.value)
12412 })
12413
12414 // Extract/add signatures
12415 txb.inputs = transaction.ins.map(function (txIn) {
12416 // TODO: remove me after testcase added
12417 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12418
12419 // Ignore empty scripts
12420 if (txIn.script.buffer.length === 0) return {}
12421
12422 return extractInput(txIn)
12423 })
12424
12425 return txb
12426 }
12427
12428 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12429 var prevOutHash
12430
12431 // txId
12432 if (typeof prevTx === 'string') {
12433 prevOutHash = new Buffer(prevTx, 'hex')
12434
12435 // TxId hex is big-endian, we want little-endian hash
12436 Array.prototype.reverse.call(prevOutHash)
12437
12438 // Transaction
12439 } else if (prevTx instanceof Transaction) {
12440 prevOutHash = prevTx.getHash()
12441 prevOutScript = prevTx.outs[index].script
12442
12443 // txHash
12444 } else {
12445 prevOutHash = prevTx
12446 }
12447
12448 var input = {}
12449 if (prevOutScript) {
12450 var prevOutType = scripts.classifyOutput(prevOutScript)
12451
12452 // if we can, extract pubKey information
12453 switch (prevOutType) {
12454 case 'multisig': {
12455 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12456 break
12457 }
12458
12459 case 'pubkey': {
12460 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12461 break
12462 }
12463 }
12464
12465 if (prevOutType !== 'scripthash') {
12466 input.scriptType = prevOutType
12467 }
12468
12469 input.prevOutScript = prevOutScript
12470 input.prevOutType = prevOutType
12471 }
12472
12473 assert(this.inputs.every(function (input2) {
12474 if (input2.hashType === undefined) return true
12475
12476 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12477 }), 'No, this would invalidate signatures')
12478
12479 var prevOut = prevOutHash.toString('hex') + ':' + index
12480 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12481
12482 var vin = this.tx.addInput(prevOutHash, index, sequence)
12483 this.inputs[vin] = input
12484 this.prevTxMap[prevOut] = vin
12485
12486 return vin
12487 }
12488
12489 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12490 assert(this.inputs.every(function (input) {
12491 if (input.hashType === undefined) return true
12492
12493 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12494 }), 'No, this would invalidate signatures')
12495
12496 return this.tx.addOutput(scriptPubKey, value)
12497 }
12498
12499 TransactionBuilder.prototype.build = function () {
12500 return this.__build(false)
12501 }
12502 TransactionBuilder.prototype.buildIncomplete = function () {
12503 return this.__build(true)
12504 }
12505
12506 var canSignTypes = {
12507 'pubkeyhash': true,
12508 'multisig': true,
12509 'pubkey': true
12510 }
12511
12512 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12513 if (!allowIncomplete) {
12514 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12515 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12516 }
12517
12518 var tx = this.tx.clone()
12519
12520 // Create script signatures from signature meta-data
12521 this.inputs.forEach(function (input, index) {
12522 var scriptType = input.scriptType
12523 var scriptSig
12524
12525 if (!allowIncomplete) {
12526 assert(!!scriptType, 'Transaction is not complete')
12527 assert(scriptType in canSignTypes, scriptType + ' not supported')
12528 assert(input.signatures, 'Transaction is missing signatures')
12529 }
12530
12531 if (input.signatures) {
12532 switch (scriptType) {
12533 case 'pubkeyhash': {
12534 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12535 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12536 break
12537 }
12538
12539 case 'multisig': {
12540 // Array.prototype.map is sparse-compatible
12541 var msSignatures = input.signatures.map(function (signature) {
12542 return signature && signature.toScriptSignature(input.hashType)
12543 })
12544
12545 // fill in blanks with OP_0
12546 if (allowIncomplete) {
12547 for (var i = 0; i < msSignatures.length; ++i) {
12548 if (msSignatures[i]) continue
12549
12550 msSignatures[i] = ops.OP_0
12551 }
12552 } else {
12553 // Array.prototype.filter returns non-sparse array
12554 msSignatures = msSignatures.filter(function (x) { return x })
12555 }
12556
12557 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12558 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12559 break
12560 }
12561
12562 case 'pubkey': {
12563 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12564 scriptSig = scripts.pubKeyInput(pkSignature)
12565 break
12566 }
12567 }
12568 }
12569
12570 // did we build a scriptSig?
12571 if (scriptSig) {
12572 // wrap as scriptHash if necessary
12573 if (input.prevOutType === 'scripthash') {
12574 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12575 }
12576
12577 tx.setInputScript(index, scriptSig)
12578 }
12579 })
12580
12581 return tx
12582 }
12583
12584 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12585 assert(index in this.inputs, 'No input at index: ' + index)
12586 hashType = hashType || Transaction.SIGHASH_ALL
12587
12588 var input = this.inputs[index]
12589 var canSign = input.hashType &&
12590 input.prevOutScript &&
12591 input.prevOutType &&
12592 input.pubKeys &&
12593 input.scriptType &&
12594 input.signatures
12595
12596 // are we almost ready to sign?
12597 if (canSign) {
12598 // if redeemScript was provided, enforce consistency
12599 if (redeemScript) {
12600 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12601 }
12602
12603 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12604
12605 // no? prepare
12606 } else {
12607 // must be pay-to-scriptHash?
12608 if (redeemScript) {
12609 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12610 if (input.prevOutScript) {
12611 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12612
12613 var scriptHash = input.prevOutScript.chunks[1]
12614 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12615 }
12616
12617 var scriptType = scripts.classifyOutput(redeemScript)
12618 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12619
12620 var pubKeys = []
12621 switch (scriptType) {
12622 case 'multisig': {
12623 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12624 break
12625 }
12626
12627 case 'pubkeyhash': {
12628 var pkh1 = redeemScript.chunks[2]
12629 var pkh2 = privKey.pub.getAddress().hash
12630
12631 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12632 pubKeys = [privKey.pub]
12633 break
12634 }
12635
12636 case 'pubkey': {
12637 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12638 break
12639 }
12640 }
12641
12642 if (!input.prevOutScript) {
12643 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12644 input.prevOutType = 'scripthash'
12645 }
12646
12647 input.pubKeys = pubKeys
12648 input.redeemScript = redeemScript
12649 input.scriptType = scriptType
12650
12651 // cannot be pay-to-scriptHash
12652 } else {
12653 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12654
12655 // can we otherwise sign this?
12656 if (input.scriptType) {
12657 assert(input.pubKeys, input.scriptType + ' not supported')
12658
12659 // we know nothin' Jon Snow, assume pubKeyHash
12660 } else {
12661 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12662 input.prevOutType = 'pubkeyhash'
12663 input.pubKeys = [privKey.pub]
12664 input.scriptType = input.prevOutType
12665 }
12666 }
12667
12668 input.hashType = hashType
12669 input.signatures = input.signatures || []
12670 }
12671
12672 var signatureScript = input.redeemScript || input.prevOutScript
12673 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12674
12675 // enforce signature order matches public keys
12676 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12677 // maintain a local copy of unmatched signatures
12678 var unmatched = input.signatures.slice()
12679
12680 input.signatures = input.pubKeys.map(function (pubKey) {
12681 var match
12682
12683 // check for any matching signatures
12684 unmatched.some(function (signature, i) {
12685 if (!pubKey.verify(signatureHash, signature)) return false
12686 match = signature
12687
12688 // remove matched signature from unmatched
12689 unmatched.splice(i, 1)
12690
12691 return true
12692 })
12693
12694 return match || undefined
12695 })
12696 }
12697
12698 // enforce in order signing of public keys
12699 assert(input.pubKeys.some(function (pubKey, i) {
12700 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12701
12702 assert(!input.signatures[i], 'Signature already exists')
12703 var signature = privKey.sign(signatureHash)
12704 input.signatures[i] = signature
12705
12706 return true
12707 }, this), 'privateKey cannot sign for this input')
12708 }
12709
12710 module.exports = TransactionBuilder
12711
12712 }).call(this,require("buffer").Buffer)
12713 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12714 (function (Buffer){
12715 var assert = require('assert')
12716 var bufferutils = require('./bufferutils')
12717 var typeForce = require('typeforce')
12718 var networks = require('./networks')
12719 var randomBytes = require('randombytes')
12720
12721 var Address = require('./address')
12722 var HDNode = require('./hdnode')
12723 var TransactionBuilder = require('./transaction_builder')
12724 var Script = require('./script')
12725
12726 function Wallet (seed, network) {
12727 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12728
12729 seed = seed || randomBytes(32)
12730 network = network || networks.bitcoin
12731
12732 // Stored in a closure to make accidental serialization less likely
12733 var masterKey = HDNode.fromSeedBuffer(seed, network)
12734
12735 // HD first-level child derivation method should be hardened
12736 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12737 var accountZero = masterKey.deriveHardened(0)
12738 var externalAccount = accountZero.derive(0)
12739 var internalAccount = accountZero.derive(1)
12740
12741 this.addresses = []
12742 this.changeAddresses = []
12743 this.network = network
12744 this.unspents = []
12745
12746 // FIXME: remove in 2.0.0
12747 this.unspentMap = {}
12748
12749 // FIXME: remove in 2.0.0
12750 var me = this
12751 this.newMasterKey = function (seed) {
12752 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12753
12754 seed = seed || randomBytes(32)
12755 masterKey = HDNode.fromSeedBuffer(seed, network)
12756
12757 accountZero = masterKey.deriveHardened(0)
12758 externalAccount = accountZero.derive(0)
12759 internalAccount = accountZero.derive(1)
12760
12761 me.addresses = []
12762 me.changeAddresses = []
12763
12764 me.unspents = []
12765 me.unspentMap = {}
12766 }
12767
12768 this.getMasterKey = function () {
12769 return masterKey
12770 }
12771 this.getAccountZero = function () {
12772 return accountZero
12773 }
12774 this.getExternalAccount = function () {
12775 return externalAccount
12776 }
12777 this.getInternalAccount = function () {
12778 return internalAccount
12779 }
12780 }
12781
12782 Wallet.prototype.createTransaction = function (to, value, options) {
12783 // FIXME: remove in 2.0.0
12784 if (typeof options !== 'object') {
12785 if (options !== undefined) {
12786 console.warn('Non options object parameters are deprecated, use options object instead')
12787
12788 options = {
12789 fixedFee: arguments[2],
12790 changeAddress: arguments[3]
12791 }
12792 }
12793 }
12794
12795 options = options || {}
12796
12797 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12798
12799 var changeAddress = options.changeAddress
12800 var fixedFee = options.fixedFee
12801 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
12802
12803 // filter by minConf, then pending and sort by descending value
12804 var unspents = this.unspents.filter(function (unspent) {
12805 return unspent.confirmations >= minConf
12806 }).filter(function (unspent) {
12807 return !unspent.pending
12808 }).sort(function (o1, o2) {
12809 return o2.value - o1.value
12810 })
12811
12812 var accum = 0
12813 var addresses = []
12814 var subTotal = value
12815
12816 var txb = new TransactionBuilder()
12817 txb.addOutput(to, value)
12818
12819 for (var i = 0; i < unspents.length; ++i) {
12820 var unspent = unspents[i]
12821 addresses.push(unspent.address)
12822
12823 txb.addInput(unspent.txHash, unspent.index)
12824
12825 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12826
12827 accum += unspent.value
12828 subTotal = value + fee
12829
12830 if (accum >= subTotal) {
12831 var change = accum - subTotal
12832
12833 if (change > this.network.dustThreshold) {
12834 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12835 }
12836
12837 break
12838 }
12839 }
12840
12841 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12842
12843 return this.signWith(txb, addresses).build()
12844 }
12845
12846 // FIXME: remove in 2.0.0
12847 Wallet.prototype.processPendingTx = function (tx) {
12848 this.__processTx(tx, true)
12849 }
12850
12851 // FIXME: remove in 2.0.0
12852 Wallet.prototype.processConfirmedTx = function (tx) {
12853 this.__processTx(tx, false)
12854 }
12855
12856 // FIXME: remove in 2.0.0
12857 Wallet.prototype.__processTx = function (tx, isPending) {
12858 console.warn('processTransaction is considered harmful, see issue #260 for more information')
12859
12860 var txId = tx.getId()
12861 var txHash = tx.getHash()
12862
12863 tx.outs.forEach(function (txOut, i) {
12864 var address
12865
12866 try {
12867 address = Address.fromOutputScript(txOut.script, this.network).toString()
12868 } catch (e) {
12869 if (!(e.message.match(/has no matching Address/)))
12870 throw e
12871 }
12872
12873 var myAddresses = this.addresses.concat(this.changeAddresses)
12874 if (myAddresses.indexOf(address) > -1) {
12875 var lookup = txId + ':' + i
12876 if (lookup in this.unspentMap) return
12877
12878 // its unique, add it
12879 var unspent = {
12880 address: address,
12881 confirmations: 0, // no way to determine this without more information
12882 index: i,
12883 txHash: txHash,
12884 txId: txId,
12885 value: txOut.value,
12886 pending: isPending
12887 }
12888
12889 this.unspentMap[lookup] = unspent
12890 this.unspents.push(unspent)
12891 }
12892 }, this)
12893
12894 tx.ins.forEach(function (txIn) {
12895 // copy and convert to big-endian hex
12896 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12897
12898 var lookup = txInId + ':' + txIn.index
12899 if (!(lookup in this.unspentMap)) return
12900
12901 var unspent = this.unspentMap[lookup]
12902
12903 if (isPending) {
12904 unspent.pending = true
12905 unspent.spent = true
12906 } else {
12907 delete this.unspentMap[lookup]
12908
12909 this.unspents = this.unspents.filter(function (unspent2) {
12910 return unspent !== unspent2
12911 })
12912 }
12913 }, this)
12914 }
12915
12916 Wallet.prototype.generateAddress = function () {
12917 var k = this.addresses.length
12918 var address = this.getExternalAccount().derive(k).getAddress()
12919
12920 this.addresses.push(address.toString())
12921
12922 return this.getReceiveAddress()
12923 }
12924
12925 Wallet.prototype.generateChangeAddress = function () {
12926 var k = this.changeAddresses.length
12927 var address = this.getInternalAccount().derive(k).getAddress()
12928
12929 this.changeAddresses.push(address.toString())
12930
12931 return this.getChangeAddress()
12932 }
12933
12934 Wallet.prototype.getAddress = function () {
12935 if (this.addresses.length === 0) {
12936 this.generateAddress()
12937 }
12938
12939 return this.addresses[this.addresses.length - 1]
12940 }
12941
12942 Wallet.prototype.getBalance = function (minConf) {
12943 minConf = minConf || 0
12944
12945 return this.unspents.filter(function (unspent) {
12946 return unspent.confirmations >= minConf
12947
12948 // FIXME: remove spent filter in 2.0.0
12949 }).filter(function (unspent) {
12950 return !unspent.spent
12951 }).reduce(function (accum, unspent) {
12952 return accum + unspent.value
12953 }, 0)
12954 }
12955
12956 Wallet.prototype.getChangeAddress = function () {
12957 if (this.changeAddresses.length === 0) {
12958 this.generateChangeAddress()
12959 }
12960
12961 return this.changeAddresses[this.changeAddresses.length - 1]
12962 }
12963
12964 Wallet.prototype.getInternalPrivateKey = function (index) {
12965 return this.getInternalAccount().derive(index).privKey
12966 }
12967
12968 Wallet.prototype.getPrivateKey = function (index) {
12969 return this.getExternalAccount().derive(index).privKey
12970 }
12971
12972 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12973 var index
12974
12975 if ((index = this.addresses.indexOf(address)) > -1) {
12976 return this.getPrivateKey(index)
12977 }
12978
12979 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12980 return this.getInternalPrivateKey(index)
12981 }
12982
12983 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12984 }
12985
12986 Wallet.prototype.getUnspentOutputs = function (minConf) {
12987 minConf = minConf || 0
12988
12989 return this.unspents.filter(function (unspent) {
12990 return unspent.confirmations >= minConf
12991
12992 // FIXME: remove spent filter in 2.0.0
12993 }).filter(function (unspent) {
12994 return !unspent.spent
12995 }).map(function (unspent) {
12996 return {
12997 address: unspent.address,
12998 confirmations: unspent.confirmations,
12999 index: unspent.index,
13000 txId: unspent.txId,
13001 value: unspent.value,
13002
13003 // FIXME: remove in 2.0.0
13004 hash: unspent.txId,
13005 pending: unspent.pending
13006 }
13007 })
13008 }
13009
13010 Wallet.prototype.setUnspentOutputs = function (unspents) {
13011 this.unspentMap = {}
13012 this.unspents = unspents.map(function (unspent) {
13013 // FIXME: remove unspent.hash in 2.0.0
13014 var txId = unspent.txId || unspent.hash
13015 var index = unspent.index
13016
13017 // FIXME: remove in 2.0.0
13018 if (unspent.hash !== undefined) {
13019 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13020 }
13021
13022 // FIXME: remove in 2.0.0
13023 if (index === undefined) {
13024 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13025 index = unspent.outputIndex
13026 }
13027
13028 typeForce('String', txId)
13029 typeForce('Number', index)
13030 typeForce('Number', unspent.value)
13031
13032 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13033 assert.doesNotThrow(function () {
13034 Address.fromBase58Check(unspent.address)
13035 }, 'Expected Base58 Address, got ' + unspent.address)
13036 assert(isFinite(index), 'Expected finite index, got ' + index)
13037
13038 // FIXME: remove branch in 2.0.0
13039 if (unspent.confirmations !== undefined) {
13040 typeForce('Number', unspent.confirmations)
13041 }
13042
13043 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13044
13045 unspent = {
13046 address: unspent.address,
13047 confirmations: unspent.confirmations || 0,
13048 index: index,
13049 txHash: txHash,
13050 txId: txId,
13051 value: unspent.value,
13052
13053 // FIXME: remove in 2.0.0
13054 pending: unspent.pending || false
13055 }
13056
13057 // FIXME: remove in 2.0.0
13058 this.unspentMap[txId + ':' + index] = unspent
13059
13060 return unspent
13061 }, this)
13062 }
13063
13064 Wallet.prototype.signWith = function (tx, addresses) {
13065 addresses.forEach(function (address, i) {
13066 var privKey = this.getPrivateKeyForAddress(address)
13067
13068 tx.sign(i, privKey)
13069 }, this)
13070
13071 return tx
13072 }
13073
13074 function estimatePaddedFee (tx, network) {
13075 var tmpTx = tx.clone()
13076 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13077
13078 return network.estimateFee(tmpTx)
13079 }
13080
13081 // FIXME: 1.0.0 shims, remove in 2.0.0
13082 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13083 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13084
13085 module.exports = Wallet
13086
13087 }).call(this,require("buffer").Buffer)
13088 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13089 });</script>
13090 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13091
13092 //// base.js
13093
13094 /** @fileOverview Javascript cryptography implementation.
13095 *
13096 * Crush to remove comments, shorten variable names and
13097 * generally reduce transmission size.
13098 *
13099 * @author Emily Stark
13100 * @author Mike Hamburg
13101 * @author Dan Boneh
13102 */
13103
13104 "use strict";
13105 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13106 /*global document, window, escape, unescape, module, require, Uint32Array */
13107
13108 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13109 var sjcl = {
13110 /** @namespace Symmetric ciphers. */
13111 cipher: {},
13112
13113 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13114 hash: {},
13115
13116 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13117 keyexchange: {},
13118
13119 /** @namespace Block cipher modes of operation. */
13120 mode: {},
13121
13122 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13123 misc: {},
13124
13125 /**
13126 * @namespace Bit array encoders and decoders.
13127 *
13128 * @description
13129 * The members of this namespace are functions which translate between
13130 * SJCL's bitArrays and other objects (usually strings). Because it
13131 * isn't always clear which direction is encoding and which is decoding,
13132 * the method names are "fromBits" and "toBits".
13133 */
13134 codec: {},
13135
13136 /** @namespace Exceptions. */
13137 exception: {
13138 /** @constructor Ciphertext is corrupt. */
13139 corrupt: function(message) {
13140 this.toString = function() { return "CORRUPT: "+this.message; };
13141 this.message = message;
13142 },
13143
13144 /** @constructor Invalid parameter. */
13145 invalid: function(message) {
13146 this.toString = function() { return "INVALID: "+this.message; };
13147 this.message = message;
13148 },
13149
13150 /** @constructor Bug or missing feature in SJCL. @constructor */
13151 bug: function(message) {
13152 this.toString = function() { return "BUG: "+this.message; };
13153 this.message = message;
13154 },
13155
13156 /** @constructor Something isn't ready. */
13157 notReady: function(message) {
13158 this.toString = function() { return "NOT READY: "+this.message; };
13159 this.message = message;
13160 }
13161 }
13162 };
13163
13164 if(typeof module !== 'undefined' && module.exports){
13165 module.exports = sjcl;
13166 }
13167 if (typeof define === "function") {
13168 define([], function () {
13169 return sjcl;
13170 });
13171 }
13172
13173
13174 //// bitArray.js
13175
13176 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13177 *
13178 * @author Emily Stark
13179 * @author Mike Hamburg
13180 * @author Dan Boneh
13181 */
13182
13183 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13184 *
13185 * @description
13186 * <p>
13187 * These objects are the currency accepted by SJCL's crypto functions.
13188 * </p>
13189 *
13190 * <p>
13191 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13192 * but many of them can take arguments that are not a multiple of 4 bytes.
13193 * This library encodes arrays of bits (whose size need not be a multiple of 8
13194 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13195 * array of words, 32 bits at a time. Since the words are double-precision
13196 * floating point numbers, they fit some extra data. We use this (in a private,
13197 * possibly-changing manner) to encode the number of bits actually present
13198 * in the last word of the array.
13199 * </p>
13200 *
13201 * <p>
13202 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13203 * to ciphers like AES which want arrays of words.
13204 * </p>
13205 */
13206 sjcl.bitArray = {
13207 /**
13208 * Array slices in units of bits.
13209 * @param {bitArray} a The array to slice.
13210 * @param {Number} bstart The offset to the start of the slice, in bits.
13211 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13212 * slice until the end of the array.
13213 * @return {bitArray} The requested slice.
13214 */
13215 bitSlice: function (a, bstart, bend) {
13216 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13217 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13218 },
13219
13220 /**
13221 * Extract a number packed into a bit array.
13222 * @param {bitArray} a The array to slice.
13223 * @param {Number} bstart The offset to the start of the slice, in bits.
13224 * @param {Number} length The length of the number to extract.
13225 * @return {Number} The requested slice.
13226 */
13227 extract: function(a, bstart, blength) {
13228 // FIXME: this Math.floor is not necessary at all, but for some reason
13229 // seems to suppress a bug in the Chromium JIT.
13230 var x, sh = Math.floor((-bstart-blength) & 31);
13231 if ((bstart + blength - 1 ^ bstart) & -32) {
13232 // it crosses a boundary
13233 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13234 } else {
13235 // within a single word
13236 x = a[bstart/32|0] >>> sh;
13237 }
13238 return x & ((1<<blength) - 1);
13239 },
13240
13241 /**
13242 * Concatenate two bit arrays.
13243 * @param {bitArray} a1 The first array.
13244 * @param {bitArray} a2 The second array.
13245 * @return {bitArray} The concatenation of a1 and a2.
13246 */
13247 concat: function (a1, a2) {
13248 if (a1.length === 0 || a2.length === 0) {
13249 return a1.concat(a2);
13250 }
13251
13252 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13253 if (shift === 32) {
13254 return a1.concat(a2);
13255 } else {
13256 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13257 }
13258 },
13259
13260 /**
13261 * Find the length of an array of bits.
13262 * @param {bitArray} a The array.
13263 * @return {Number} The length of a, in bits.
13264 */
13265 bitLength: function (a) {
13266 var l = a.length, x;
13267 if (l === 0) { return 0; }
13268 x = a[l - 1];
13269 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13270 },
13271
13272 /**
13273 * Truncate an array.
13274 * @param {bitArray} a The array.
13275 * @param {Number} len The length to truncate to, in bits.
13276 * @return {bitArray} A new array, truncated to len bits.
13277 */
13278 clamp: function (a, len) {
13279 if (a.length * 32 < len) { return a; }
13280 a = a.slice(0, Math.ceil(len / 32));
13281 var l = a.length;
13282 len = len & 31;
13283 if (l > 0 && len) {
13284 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13285 }
13286 return a;
13287 },
13288
13289 /**
13290 * Make a partial word for a bit array.
13291 * @param {Number} len The number of bits in the word.
13292 * @param {Number} x The bits.
13293 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13294 * @return {Number} The partial word.
13295 */
13296 partial: function (len, x, _end) {
13297 if (len === 32) { return x; }
13298 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13299 },
13300
13301 /**
13302 * Get the number of bits used by a partial word.
13303 * @param {Number} x The partial word.
13304 * @return {Number} The number of bits used by the partial word.
13305 */
13306 getPartial: function (x) {
13307 return Math.round(x/0x10000000000) || 32;
13308 },
13309
13310 /**
13311 * Compare two arrays for equality in a predictable amount of time.
13312 * @param {bitArray} a The first array.
13313 * @param {bitArray} b The second array.
13314 * @return {boolean} true if a == b; false otherwise.
13315 */
13316 equal: function (a, b) {
13317 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13318 return false;
13319 }
13320 var x = 0, i;
13321 for (i=0; i<a.length; i++) {
13322 x |= a[i]^b[i];
13323 }
13324 return (x === 0);
13325 },
13326
13327 /** Shift an array right.
13328 * @param {bitArray} a The array to shift.
13329 * @param {Number} shift The number of bits to shift.
13330 * @param {Number} [carry=0] A byte to carry in
13331 * @param {bitArray} [out=[]] An array to prepend to the output.
13332 * @private
13333 */
13334 _shiftRight: function (a, shift, carry, out) {
13335 var i, last2=0, shift2;
13336 if (out === undefined) { out = []; }
13337
13338 for (; shift >= 32; shift -= 32) {
13339 out.push(carry);
13340 carry = 0;
13341 }
13342 if (shift === 0) {
13343 return out.concat(a);
13344 }
13345
13346 for (i=0; i<a.length; i++) {
13347 out.push(carry | a[i]>>>shift);
13348 carry = a[i] << (32-shift);
13349 }
13350 last2 = a.length ? a[a.length-1] : 0;
13351 shift2 = sjcl.bitArray.getPartial(last2);
13352 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13353 return out;
13354 },
13355
13356 /** xor a block of 4 words together.
13357 * @private
13358 */
13359 _xor4: function(x,y) {
13360 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13361 },
13362
13363 /** byteswap a word array inplace.
13364 * (does not handle partial words)
13365 * @param {sjcl.bitArray} a word array
13366 * @return {sjcl.bitArray} byteswapped array
13367 */
13368 byteswapM: function(a) {
13369 var i, v, m = 0xff00;
13370 for (i = 0; i < a.length; ++i) {
13371 v = a[i];
13372 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13373 }
13374 return a;
13375 }
13376 };
13377
13378
13379 //// codecString.js
13380
13381 /** @fileOverview Bit array codec implementations.
13382 *
13383 * @author Emily Stark
13384 * @author Mike Hamburg
13385 * @author Dan Boneh
13386 */
13387
13388 /** @namespace UTF-8 strings */
13389 sjcl.codec.utf8String = {
13390 /** Convert from a bitArray to a UTF-8 string. */
13391 fromBits: function (arr) {
13392 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13393 for (i=0; i<bl/8; i++) {
13394 if ((i&3) === 0) {
13395 tmp = arr[i/4];
13396 }
13397 out += String.fromCharCode(tmp >>> 24);
13398 tmp <<= 8;
13399 }
13400 return decodeURIComponent(escape(out));
13401 },
13402
13403 /** Convert from a UTF-8 string to a bitArray. */
13404 toBits: function (str) {
13405 str = unescape(encodeURIComponent(str));
13406 var out = [], i, tmp=0;
13407 for (i=0; i<str.length; i++) {
13408 tmp = tmp << 8 | str.charCodeAt(i);
13409 if ((i&3) === 3) {
13410 out.push(tmp);
13411 tmp = 0;
13412 }
13413 }
13414 if (i&3) {
13415 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13416 }
13417 return out;
13418 }
13419 };
13420
13421
13422 //// codecHex.js
13423
13424 /** @fileOverview Bit array codec implementations.
13425 *
13426 * @author Emily Stark
13427 * @author Mike Hamburg
13428 * @author Dan Boneh
13429 */
13430
13431 /** @namespace Hexadecimal */
13432 sjcl.codec.hex = {
13433 /** Convert from a bitArray to a hex string. */
13434 fromBits: function (arr) {
13435 var out = "", i;
13436 for (i=0; i<arr.length; i++) {
13437 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13438 }
13439 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13440 },
13441 /** Convert from a hex string to a bitArray. */
13442 toBits: function (str) {
13443 var i, out=[], len;
13444 str = str.replace(/\s|0x/g, "");
13445 len = str.length;
13446 str = str + "00000000";
13447 for (i=0; i<str.length; i+=8) {
13448 out.push(parseInt(str.substr(i,8),16)^0);
13449 }
13450 return sjcl.bitArray.clamp(out, len*4);
13451 }
13452 };
13453
13454
13455 //// sha512.js
13456
13457 /** @fileOverview Javascript SHA-512 implementation.
13458 *
13459 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13460 * SJCL by Stefan Thomas.
13461 *
13462 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13463 * Released with New BSD License
13464 *
13465 * @author Emily Stark
13466 * @author Mike Hamburg
13467 * @author Dan Boneh
13468 * @author Jeff Mott
13469 * @author Stefan Thomas
13470 */
13471
13472 /**
13473 * Context for a SHA-512 operation in progress.
13474 * @constructor
13475 * @class Secure Hash Algorithm, 512 bits.
13476 */
13477 sjcl.hash.sha512 = function (hash) {
13478 if (!this._key[0]) { this._precompute(); }
13479 if (hash) {
13480 this._h = hash._h.slice(0);
13481 this._buffer = hash._buffer.slice(0);
13482 this._length = hash._length;
13483 } else {
13484 this.reset();
13485 }
13486 };
13487
13488 /**
13489 * Hash a string or an array of words.
13490 * @static
13491 * @param {bitArray|String} data the data to hash.
13492 * @return {bitArray} The hash value, an array of 16 big-endian words.
13493 */
13494 sjcl.hash.sha512.hash = function (data) {
13495 return (new sjcl.hash.sha512()).update(data).finalize();
13496 };
13497
13498 sjcl.hash.sha512.prototype = {
13499 /**
13500 * The hash's block size, in bits.
13501 * @constant
13502 */
13503 blockSize: 1024,
13504
13505 /**
13506 * Reset the hash state.
13507 * @return this
13508 */
13509 reset:function () {
13510 this._h = this._init.slice(0);
13511 this._buffer = [];
13512 this._length = 0;
13513 return this;
13514 },
13515
13516 /**
13517 * Input several words to the hash.
13518 * @param {bitArray|String} data the data to hash.
13519 * @return this
13520 */
13521 update: function (data) {
13522 if (typeof data === "string") {
13523 data = sjcl.codec.utf8String.toBits(data);
13524 }
13525 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13526 ol = this._length,
13527 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13528 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13529 this._block(b.splice(0,32));
13530 }
13531 return this;
13532 },
13533
13534 /**
13535 * Complete hashing and output the hash value.
13536 * @return {bitArray} The hash value, an array of 16 big-endian words.
13537 */
13538 finalize:function () {
13539 var i, b = this._buffer, h = this._h;
13540
13541 // Round out and push the buffer
13542 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13543
13544 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13545 for (i = b.length + 4; i & 31; i++) {
13546 b.push(0);
13547 }
13548
13549 // append the length
13550 b.push(0);
13551 b.push(0);
13552 b.push(Math.floor(this._length / 0x100000000));
13553 b.push(this._length | 0);
13554
13555 while (b.length) {
13556 this._block(b.splice(0,32));
13557 }
13558
13559 this.reset();
13560 return h;
13561 },
13562
13563 /**
13564 * The SHA-512 initialization vector, to be precomputed.
13565 * @private
13566 */
13567 _init:[],
13568
13569 /**
13570 * Least significant 24 bits of SHA512 initialization values.
13571 *
13572 * Javascript only has 53 bits of precision, so we compute the 40 most
13573 * significant bits and add the remaining 24 bits as constants.
13574 *
13575 * @private
13576 */
13577 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13578
13579 /*
13580 _init:
13581 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13582 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13583 */
13584
13585 /**
13586 * The SHA-512 hash key, to be precomputed.
13587 * @private
13588 */
13589 _key:[],
13590
13591 /**
13592 * Least significant 24 bits of SHA512 key values.
13593 * @private
13594 */
13595 _keyr:
13596 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13597 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13598 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13599 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13600 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13601 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13602 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13603 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13604 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13605 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13606
13607 /*
13608 _key:
13609 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13610 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13611 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13612 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13613 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13614 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13615 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13616 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13617 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13618 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13619 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13620 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13621 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13622 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13623 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13624 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13625 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13626 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13627 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13628 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13629 */
13630
13631 /**
13632 * Function to precompute _init and _key.
13633 * @private
13634 */
13635 _precompute: function () {
13636 // XXX: This code is for precomputing the SHA256 constants, change for
13637 // SHA512 and re-enable.
13638 var i = 0, prime = 2, factor;
13639
13640 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13641 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13642
13643 outer: for (; i<80; prime++) {
13644 for (factor=2; factor*factor <= prime; factor++) {
13645 if (prime % factor === 0) {
13646 // not a prime
13647 continue outer;
13648 }
13649 }
13650
13651 if (i<8) {
13652 this._init[i*2] = frac(Math.pow(prime, 1/2));
13653 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13654 }
13655 this._key[i*2] = frac(Math.pow(prime, 1/3));
13656 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13657 i++;
13658 }
13659 },
13660
13661 /**
13662 * Perform one cycle of SHA-512.
13663 * @param {bitArray} words one block of words.
13664 * @private
13665 */
13666 _block:function (words) {
13667 var i, wrh, wrl,
13668 w = words.slice(0),
13669 h = this._h,
13670 k = this._key,
13671 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13672 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13673 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13674 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13675
13676 // Working variables
13677 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13678 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13679 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13680 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13681
13682 for (i=0; i<80; i++) {
13683 // load up the input word for this round
13684 if (i<16) {
13685 wrh = w[i * 2];
13686 wrl = w[i * 2 + 1];
13687 } else {
13688 // Gamma0
13689 var gamma0xh = w[(i-15) * 2];
13690 var gamma0xl = w[(i-15) * 2 + 1];
13691 var gamma0h =
13692 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13693 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13694 (gamma0xh >>> 7);
13695 var gamma0l =
13696 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13697 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13698 ((gamma0xh << 25) | (gamma0xl >>> 7));
13699
13700 // Gamma1
13701 var gamma1xh = w[(i-2) * 2];
13702 var gamma1xl = w[(i-2) * 2 + 1];
13703 var gamma1h =
13704 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13705 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13706 (gamma1xh >>> 6);
13707 var gamma1l =
13708 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13709 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13710 ((gamma1xh << 26) | (gamma1xl >>> 6));
13711
13712 // Shortcuts
13713 var wr7h = w[(i-7) * 2];
13714 var wr7l = w[(i-7) * 2 + 1];
13715
13716 var wr16h = w[(i-16) * 2];
13717 var wr16l = w[(i-16) * 2 + 1];
13718
13719 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13720 wrl = gamma0l + wr7l;
13721 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13722 wrl += gamma1l;
13723 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13724 wrl += wr16l;
13725 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13726 }
13727
13728 w[i*2] = wrh |= 0;
13729 w[i*2 + 1] = wrl |= 0;
13730
13731 // Ch
13732 var chh = (eh & fh) ^ (~eh & gh);
13733 var chl = (el & fl) ^ (~el & gl);
13734
13735 // Maj
13736 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13737 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13738
13739 // Sigma0
13740 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13741 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13742
13743 // Sigma1
13744 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13745 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13746
13747 // K(round)
13748 var krh = k[i*2];
13749 var krl = k[i*2+1];
13750
13751 // t1 = h + sigma1 + ch + K(round) + W(round)
13752 var t1l = hl + sigma1l;
13753 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13754 t1l += chl;
13755 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13756 t1l += krl;
13757 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13758 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13759 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13760
13761 // t2 = sigma0 + maj
13762 var t2l = sigma0l + majl;
13763 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13764
13765 // Update working variables
13766 hh = gh;
13767 hl = gl;
13768 gh = fh;
13769 gl = fl;
13770 fh = eh;
13771 fl = el;
13772 el = (dl + t1l) | 0;
13773 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13774 dh = ch;
13775 dl = cl;
13776 ch = bh;
13777 cl = bl;
13778 bh = ah;
13779 bl = al;
13780 al = (t1l + t2l) | 0;
13781 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13782 }
13783
13784 // Intermediate hash
13785 h0l = h[1] = (h0l + al) | 0;
13786 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13787 h1l = h[3] = (h1l + bl) | 0;
13788 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13789 h2l = h[5] = (h2l + cl) | 0;
13790 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13791 h3l = h[7] = (h3l + dl) | 0;
13792 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13793 h4l = h[9] = (h4l + el) | 0;
13794 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13795 h5l = h[11] = (h5l + fl) | 0;
13796 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13797 h6l = h[13] = (h6l + gl) | 0;
13798 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13799 h7l = h[15] = (h7l + hl) | 0;
13800 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13801 }
13802 };
13803
13804
13805 //// hmac.js
13806
13807 /** @fileOverview HMAC implementation.
13808 *
13809 * @author Emily Stark
13810 * @author Mike Hamburg
13811 * @author Dan Boneh
13812 */
13813
13814 /** HMAC with the specified hash function.
13815 * @constructor
13816 * @param {bitArray} key the key for HMAC.
13817 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13818 */
13819 sjcl.misc.hmac = function (key, Hash) {
13820 this._hash = Hash = Hash || sjcl.hash.sha256;
13821 var exKey = [[],[]], i,
13822 bs = Hash.prototype.blockSize / 32;
13823 this._baseHash = [new Hash(), new Hash()];
13824
13825 if (key.length > bs) {
13826 key = Hash.hash(key);
13827 }
13828
13829 for (i=0; i<bs; i++) {
13830 exKey[0][i] = key[i]^0x36363636;
13831 exKey[1][i] = key[i]^0x5C5C5C5C;
13832 }
13833
13834 this._baseHash[0].update(exKey[0]);
13835 this._baseHash[1].update(exKey[1]);
13836 this._resultHash = new Hash(this._baseHash[0]);
13837 };
13838
13839 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13840 * @param {bitArray|String} data The data to mac.
13841 */
13842 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13843 if (!this._updated) {
13844 this.update(data);
13845 return this.digest(data);
13846 } else {
13847 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13848 }
13849 };
13850
13851 sjcl.misc.hmac.prototype.reset = function () {
13852 this._resultHash = new this._hash(this._baseHash[0]);
13853 this._updated = false;
13854 };
13855
13856 sjcl.misc.hmac.prototype.update = function (data) {
13857 this._updated = true;
13858 this._resultHash.update(data);
13859 };
13860
13861 sjcl.misc.hmac.prototype.digest = function () {
13862 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13863
13864 this.reset();
13865
13866 return result;
13867 };
13868
13869
13870 //// pbkdf2.js
13871
13872
13873 /** @fileOverview Password-based key-derivation function, version 2.0.
13874 *
13875 * @author Emily Stark
13876 * @author Mike Hamburg
13877 * @author Dan Boneh
13878 */
13879
13880 /** Password-Based Key-Derivation Function, version 2.0.
13881 *
13882 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13883 *
13884 * This is the method specified by RSA's PKCS #5 standard.
13885 *
13886 * @param {bitArray|String} password The password.
13887 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13888 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13889 * @param {Number} [length] The length of the derived key. Defaults to the
13890 output size of the hash function.
13891 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13892 * @return {bitArray} the derived key.
13893 */
13894 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13895 count = count || 1000;
13896
13897 if (length < 0 || count < 0) {
13898 throw sjcl.exception.invalid("invalid params to pbkdf2");
13899 }
13900
13901 if (typeof password === "string") {
13902 password = sjcl.codec.utf8String.toBits(password);
13903 }
13904
13905 if (typeof salt === "string") {
13906 salt = sjcl.codec.utf8String.toBits(salt);
13907 }
13908
13909 Prff = Prff || sjcl.misc.hmac;
13910
13911 var prf = new Prff(password),
13912 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13913
13914 for (k = 1; 32 * out.length < (length || 1); k++) {
13915 u = ui = prf.encrypt(b.concat(salt,[k]));
13916
13917 for (i=1; i<count; i++) {
13918 ui = prf.encrypt(ui);
13919 for (j=0; j<ui.length; j++) {
13920 u[j] ^= ui[j];
13921 }
13922 }
13923
13924 out = out.concat(u);
13925 }
13926
13927 if (length) { out = b.clamp(out, length); }
13928
13929 return out;
13930 };
13931
13932
13933 //// sha256.js
13934
13935 /** @fileOverview Javascript SHA-256 implementation.
13936 *
13937 * An older version of this implementation is available in the public
13938 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13939 * Stanford University 2008-2010 and BSD-licensed for liability
13940 * reasons.
13941 *
13942 * Special thanks to Aldo Cortesi for pointing out several bugs in
13943 * this code.
13944 *
13945 * @author Emily Stark
13946 * @author Mike Hamburg
13947 * @author Dan Boneh
13948 */
13949
13950 /**
13951 * Context for a SHA-256 operation in progress.
13952 * @constructor
13953 * @class Secure Hash Algorithm, 256 bits.
13954 */
13955 sjcl.hash.sha256 = function (hash) {
13956 if (!this._key[0]) { this._precompute(); }
13957 if (hash) {
13958 this._h = hash._h.slice(0);
13959 this._buffer = hash._buffer.slice(0);
13960 this._length = hash._length;
13961 } else {
13962 this.reset();
13963 }
13964 };
13965
13966 /**
13967 * Hash a string or an array of words.
13968 * @static
13969 * @param {bitArray|String} data the data to hash.
13970 * @return {bitArray} The hash value, an array of 16 big-endian words.
13971 */
13972 sjcl.hash.sha256.hash = function (data) {
13973 return (new sjcl.hash.sha256()).update(data).finalize();
13974 };
13975
13976 sjcl.hash.sha256.prototype = {
13977 /**
13978 * The hash's block size, in bits.
13979 * @constant
13980 */
13981 blockSize: 512,
13982
13983 /**
13984 * Reset the hash state.
13985 * @return this
13986 */
13987 reset:function () {
13988 this._h = this._init.slice(0);
13989 this._buffer = [];
13990 this._length = 0;
13991 return this;
13992 },
13993
13994 /**
13995 * Input several words to the hash.
13996 * @param {bitArray|String} data the data to hash.
13997 * @return this
13998 */
13999 update: function (data) {
14000 if (typeof data === "string") {
14001 data = sjcl.codec.utf8String.toBits(data);
14002 }
14003 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14004 ol = this._length,
14005 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14006 for (i = 512+ol & -512; i <= nl; i+= 512) {
14007 this._block(b.splice(0,16));
14008 }
14009 return this;
14010 },
14011
14012 /**
14013 * Complete hashing and output the hash value.
14014 * @return {bitArray} The hash value, an array of 8 big-endian words.
14015 */
14016 finalize:function () {
14017 var i, b = this._buffer, h = this._h;
14018
14019 // Round out and push the buffer
14020 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14021
14022 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14023 for (i = b.length + 2; i & 15; i++) {
14024 b.push(0);
14025 }
14026
14027 // append the length
14028 b.push(Math.floor(this._length / 0x100000000));
14029 b.push(this._length | 0);
14030
14031 while (b.length) {
14032 this._block(b.splice(0,16));
14033 }
14034
14035 this.reset();
14036 return h;
14037 },
14038
14039 /**
14040 * The SHA-256 initialization vector, to be precomputed.
14041 * @private
14042 */
14043 _init:[],
14044 /*
14045 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14046 */
14047
14048 /**
14049 * The SHA-256 hash key, to be precomputed.
14050 * @private
14051 */
14052 _key:[],
14053 /*
14054 _key:
14055 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14056 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14057 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14058 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14059 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14060 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14061 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14062 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14063 */
14064
14065
14066 /**
14067 * Function to precompute _init and _key.
14068 * @private
14069 */
14070 _precompute: function () {
14071 var i = 0, prime = 2, factor;
14072
14073 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14074
14075 outer: for (; i<64; prime++) {
14076 for (factor=2; factor*factor <= prime; factor++) {
14077 if (prime % factor === 0) {
14078 // not a prime
14079 continue outer;
14080 }
14081 }
14082
14083 if (i<8) {
14084 this._init[i] = frac(Math.pow(prime, 1/2));
14085 }
14086 this._key[i] = frac(Math.pow(prime, 1/3));
14087 i++;
14088 }
14089 },
14090
14091 /**
14092 * Perform one cycle of SHA-256.
14093 * @param {bitArray} words one block of words.
14094 * @private
14095 */
14096 _block:function (words) {
14097 var i, tmp, a, b,
14098 w = words.slice(0),
14099 h = this._h,
14100 k = this._key,
14101 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14102 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14103
14104 /* Rationale for placement of |0 :
14105 * If a value can overflow is original 32 bits by a factor of more than a few
14106 * million (2^23 ish), there is a possibility that it might overflow the
14107 * 53-bit mantissa and lose precision.
14108 *
14109 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14110 * propagates around the loop, and on the hash state h[]. I don't believe
14111 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14112 * (for h4 anyway), and better safe than sorry.
14113 *
14114 * The clamps on h[] are necessary for the output to be correct even in the
14115 * common case and for short inputs.
14116 */
14117 for (i=0; i<64; i++) {
14118 // load up the input word for this round
14119 if (i<16) {
14120 tmp = w[i];
14121 } else {
14122 a = w[(i+1 ) & 15];
14123 b = w[(i+14) & 15];
14124 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14125 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14126 w[i&15] + w[(i+9) & 15]) | 0;
14127 }
14128
14129 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14130
14131 // shift register
14132 h7 = h6; h6 = h5; h5 = h4;
14133 h4 = h3 + tmp | 0;
14134 h3 = h2; h2 = h1; h1 = h0;
14135
14136 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14137 }
14138
14139 h[0] = h[0]+h0 | 0;
14140 h[1] = h[1]+h1 | 0;
14141 h[2] = h[2]+h2 | 0;
14142 h[3] = h[3]+h3 | 0;
14143 h[4] = h[4]+h4 | 0;
14144 h[5] = h[5]+h5 | 0;
14145 h[6] = h[6]+h6 | 0;
14146 h[7] = h[7]+h7 | 0;
14147 }
14148 };
14149 </script>
14150 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14151 WORDLISTS["english"] = [
14152 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14153 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14154 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14155 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14156 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14157 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14158 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14159 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14160 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14161 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14162 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14163 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14164 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14165 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14166 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14167 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14168 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14169 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14170 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14171 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14172 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14173 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14174 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14175 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14176 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14177 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14178 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14179 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14180 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14181 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14182 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14183 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14184 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14185 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14186 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14187 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14188 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14189 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14190 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14191 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14192 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14193 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14194 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14195 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14196 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14197 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14198 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14199 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14200 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14201 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14202 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14203 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14204 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14205 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14206 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14207 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14208 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14209 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14210 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14211 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14212 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14213 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14214 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14215 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14216 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14217 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14218 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14219 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14220 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14221 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14222 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14223 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14224 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14225 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14226 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14227 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14228 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14229 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14230 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14231 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14232 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14233 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14234 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14235 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14236 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14237 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14238 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14239 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14240 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14241 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14242 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14243 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14244 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14245 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14246 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14247 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14248 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14249 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14250 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14251 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14252 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14253 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14254 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14255 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14256 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14257 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14258 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14259 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14260 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14261 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14262 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14263 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14264 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14265 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14266 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14267 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14268 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14269 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14270 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14271 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14272 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14273 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14274 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14275 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14276 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14277 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14278 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14279 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14280 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14281 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14282 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14283 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14284 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14285 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14286 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14287 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14288 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14289 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14290 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14291 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14292 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14293 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14294 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14295 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14296 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14297 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14298 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14299 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14300 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14301 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14302 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14303 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14304 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14305 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14306 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14307 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14308 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14309 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14310 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14311 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14312 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14313 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14314 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14315 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14316 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14317 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14318 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14319 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14320 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14321 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14322 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14323 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14324 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14325 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14326 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14327 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14328 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14329 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14330 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14331 "thank","that","theme","then","theory","there","they","thing","this","thought",
14332 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14333 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14334 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14335 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14336 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14337 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14338 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14339 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14340 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14341 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14342 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14343 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14344 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14345 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14346 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14347 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14348 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14349 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14350 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14351 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14352 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14353 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14354 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14355 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14356 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14357 </script>
14358 <script>/*
14359 * Copyright (c) 2013 Pavol Rusnak
14360 *
14361 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14362 * this software and associated documentation files (the "Software"), to deal in
14363 * the Software without restriction, including without limitation the rights to
14364 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14365 * of the Software, and to permit persons to whom the Software is furnished to do
14366 * so, subject to the following conditions:
14367 *
14368 * The above copyright notice and this permission notice shall be included in all
14369 * copies or substantial portions of the Software.
14370 *
14371 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14372 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14373 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14374 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14375 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14376 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14377 */
14378
14379 /*
14380 * Javascript port from python by Ian Coleman
14381 *
14382 * Requires code from sjcl
14383 * https://github.com/bitwiseshiftleft/sjcl
14384 */
14385
14386 var Mnemonic = function(language) {
14387
14388 var PBKDF2_ROUNDS = 2048;
14389 var RADIX = 2048;
14390
14391 var self = this;
14392 var wordlist = [];
14393
14394 var hmacSHA512 = function(key) {
14395 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14396 this.encrypt = function() {
14397 return hasher.encrypt.apply(hasher, arguments);
14398 };
14399 };
14400
14401 function init() {
14402 wordlist = WORDLISTS[language];
14403 if (wordlist.length != RADIX) {
14404 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14405 throw err;
14406 }
14407 }
14408
14409 self.generate = function(strength) {
14410 strength = strength || 128;
14411 var r = strength % 32;
14412 if (r > 0) {
14413 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14414 }
14415 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14416 if (!hasStrongCrypto) {
14417 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14418 }
14419 var buffer = new Uint8Array(strength / 8);
14420 var data = crypto.getRandomValues(buffer);
14421 return self.toMnemonic(data);
14422 }
14423
14424 self.toMnemonic = function(byteArray) {
14425 if (byteArray.length % 4 > 0) {
14426 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14427 }
14428
14429 //h = hashlib.sha256(data).hexdigest()
14430 var data = byteArrayToWordArray(byteArray);
14431 var hash = sjcl.hash.sha256.hash(data);
14432 var h = sjcl.codec.hex.fromBits(hash);
14433
14434 // b is a binary string, eg '00111010101100...'
14435 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14436 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14437 //
14438 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14439 // c = bin(int(h, 16))[2:].zfill(256)
14440 // d = c[:len(data) * 8 / 32]
14441 var a = byteArrayToBinaryString(byteArray);
14442 var c = zfill(hexStringToBinaryString(h), 256);
14443 var d = c.substring(0, byteArray.length * 8 / 32);
14444 // b = line1 + line2
14445 var b = a + d;
14446
14447 var result = [];
14448 var blen = b.length / 11;
14449 for (var i=0; i<blen; i++) {
14450 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14451 result.push(wordlist[idx]);
14452 }
14453 return result.join(' ');
14454 }
14455
14456 self.check = function(mnemonic) {
14457 var mnemonic = mnemonic.split(' ')
14458 if (mnemonic.length % 3 > 0) {
14459 return false
14460 }
14461 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14462 var idx = [];
14463 for (var i=0; i<mnemonic.length; i++) {
14464 var word = mnemonic[i];
14465 var wordIndex = wordlist.indexOf(word);
14466 if (wordIndex == -1) {
14467 return false;
14468 }
14469 var binaryIndex = zfill(wordIndex.toString(2), 11);
14470 idx.push(binaryIndex);
14471 }
14472 var b = idx.join('');
14473 var l = b.length;
14474 //d = b[:l / 33 * 32]
14475 //h = b[-l / 33:]
14476 var d = b.substring(0, l / 33 * 32);
14477 var h = b.substring(l - l / 33, l);
14478 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14479 var nd = binaryStringToWordArray(d);
14480 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14481 var ndHash = sjcl.hash.sha256.hash(nd);
14482 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14483 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14484 var nh = ndBstr.substring(0,l/33);
14485 return h == nh;
14486 }
14487
14488 self.toSeed = function(mnemonic, passphrase) {
14489 passphrase = passphrase || '';
14490 mnemonic = self.normalizeString(mnemonic)
14491 passphrase = self.normalizeString(passphrase)
14492 passphrase = "mnemonic" + passphrase;
14493 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14494 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14495 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14496 var hashHex = sjcl.codec.hex.fromBits(result);
14497 return hashHex;
14498 }
14499
14500 self.normalizeString = function(str) {
14501 if (typeof str.normalize == "function") {
14502 return str.normalize("NFKD");
14503 }
14504 else {
14505 // TODO decide how to handle this in the future.
14506 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14507 return str;
14508 }
14509 }
14510
14511 function byteArrayToWordArray(data) {
14512 var a = [];
14513 for (var i=0; i<data.length/4; i++) {
14514 v = 0;
14515 v += data[i*4 + 0] << 8 * 3;
14516 v += data[i*4 + 1] << 8 * 2;
14517 v += data[i*4 + 2] << 8 * 1;
14518 v += data[i*4 + 3] << 8 * 0;
14519 a.push(v);
14520 }
14521 return a;
14522 }
14523
14524 function byteArrayToBinaryString(data) {
14525 var bin = "";
14526 for (var i=0; i<data.length; i++) {
14527 bin += zfill(data[i].toString(2), 8);
14528 }
14529 return bin;
14530 }
14531
14532 function hexStringToBinaryString(hexString) {
14533 binaryString = "";
14534 for (var i=0; i<hexString.length; i++) {
14535 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14536 }
14537 return binaryString;
14538 }
14539
14540 function binaryStringToWordArray(binary) {
14541 var aLen = binary.length / 32;
14542 var a = [];
14543 for (var i=0; i<aLen; i++) {
14544 var valueStr = binary.substring(0,32);
14545 var value = parseInt(valueStr, 2);
14546 a.push(value);
14547 binary = binary.slice(32);
14548 }
14549 return a;
14550 }
14551
14552 // Pad a numeric string on the left with zero digits until the given width
14553 // is reached.
14554 // Note this differs to the python implementation because it does not
14555 // handle numbers starting with a sign.
14556 function zfill(source, length) {
14557 source = source.toString();
14558 while (source.length < length) {
14559 source = '0' + source;
14560 }
14561 return source;
14562 }
14563
14564 init();
14565
14566 }
14567 </script>
14568 <script>(function() {
14569
14570 var mnemonic = new Mnemonic("english");
14571 var bip32RootKey = null;
14572 var bip32ExtendedKey = null;
14573 var network = bitcoin.networks.bitcoin;
14574 var addressRowTemplate = $("#address-row-template");
14575
14576 var showIndex = true;
14577 var showAddress = true;
14578 var showPrivKey = true;
14579
14580 var phraseChangeTimeoutEvent = null;
14581
14582 var DOM = {};
14583 DOM.network = $(".network");
14584 DOM.phraseNetwork = $("#network-phrase");
14585 DOM.phrase = $(".phrase");
14586 DOM.passphrase = $(".passphrase");
14587 DOM.generate = $(".generate");
14588 DOM.rootKey = $(".root-key");
14589 DOM.extendedPrivKey = $(".extended-priv-key");
14590 DOM.extendedPubKey = $(".extended-pub-key");
14591 DOM.bip32tab = $("#bip32-tab");
14592 DOM.bip44tab = $("#bip44-tab");
14593 DOM.bip32panel = $("#bip32");
14594 DOM.bip44panel = $("#bip44");
14595 DOM.bip32path = $("#bip32-path");
14596 DOM.bip44path = $("#bip44-path");
14597 DOM.bip44purpose = $("#bip44 .purpose");
14598 DOM.bip44coin = $("#bip44 .coin");
14599 DOM.bip44account = $("#bip44 .account");
14600 DOM.bip44change = $("#bip44 .change");
14601 DOM.strength = $(".strength");
14602 DOM.addresses = $(".addresses");
14603 DOM.rowsToAdd = $(".rows-to-add");
14604 DOM.more = $(".more");
14605 DOM.feedback = $(".feedback");
14606 DOM.tab = $(".derivation-type a");
14607 DOM.indexToggle = $(".index-toggle");
14608 DOM.addressToggle = $(".address-toggle");
14609 DOM.privateKeyToggle = $(".private-key-toggle");
14610 DOM.myceliumPath = $("#mycelium-path");
14611
14612 var derivationPath = $(".tab-pane.active .path").val();
14613
14614 function init() {
14615 // Events
14616 DOM.network.on("change", networkChanged);
14617 DOM.phrase.on("input", delayedPhraseChanged);
14618 DOM.passphrase.on("input", delayedPhraseChanged);
14619 DOM.generate.on("click", generateClicked);
14620 DOM.more.on("click", showMore);
14621 DOM.bip32path.on("input", bip32Changed);
14622 DOM.bip44purpose.on("input", bip44Changed);
14623 DOM.bip44coin.on("input", bip44Changed);
14624 DOM.bip44account.on("input", bip44Changed);
14625 DOM.bip44change.on("input", bip44Changed);
14626 DOM.tab.on("click", tabClicked);
14627 DOM.indexToggle.on("click", toggleIndexes);
14628 DOM.addressToggle.on("click", toggleAddresses);
14629 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14630 disableForms();
14631 hidePending();
14632 hideValidationError();
14633 populateNetworkSelect();
14634 }
14635
14636 // Event handlers
14637
14638 function networkChanged(e) {
14639 var network = e.target.value;
14640 networks[network].onSelect();
14641 setBip44DerivationPath();
14642 delayedPhraseChanged();
14643 }
14644
14645 function delayedPhraseChanged() {
14646 hideValidationError();
14647 showPending();
14648 if (phraseChangeTimeoutEvent != null) {
14649 clearTimeout(phraseChangeTimeoutEvent);
14650 }
14651 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14652 }
14653
14654 function phraseChanged() {
14655 showPending();
14656 hideValidationError();
14657 // Get the mnemonic phrase
14658 var phrase = DOM.phrase.val();
14659 var passphrase = DOM.passphrase.val();
14660 var errorText = findPhraseErrors(phrase);
14661 if (errorText) {
14662 showValidationError(errorText);
14663 return;
14664 }
14665 // Get the derivation path
14666 var errorText = findDerivationPathErrors();
14667 if (errorText) {
14668 showValidationError(errorText);
14669 return;
14670 }
14671 // Calculate and display
14672 calcBip32Seed(phrase, passphrase, derivationPath);
14673 displayBip32Info();
14674 hidePending();
14675 }
14676
14677 function generateClicked() {
14678 clearDisplay();
14679 showPending();
14680 setTimeout(function() {
14681 var phrase = generateRandomPhrase();
14682 if (!phrase) {
14683 return;
14684 }
14685 phraseChanged();
14686 }, 50);
14687 }
14688
14689 function tabClicked(e) {
14690 var activePath = $(e.target.getAttribute("href") + " .path");
14691 derivationPath = activePath.val();
14692 derivationChanged();
14693 }
14694
14695 function derivationChanged() {
14696 delayedPhraseChanged();
14697 }
14698
14699 function bip32Changed() {
14700 derivationPath = DOM.bip32path.val();
14701 derivationChanged();
14702 }
14703
14704 function bip44Changed() {
14705 setBip44DerivationPath();
14706 derivationPath = DOM.bip44path.val();
14707 derivationChanged();
14708 }
14709
14710 function toggleIndexes() {
14711 showIndex = !showIndex;
14712 $("td.index span").toggleClass("invisible");
14713 }
14714
14715 function toggleAddresses() {
14716 showAddress = !showAddress;
14717 $("td.address span").toggleClass("invisible");
14718 }
14719
14720 function togglePrivateKeys() {
14721 showPrivKey = !showPrivKey;
14722 $("td.privkey span").toggleClass("invisible");
14723 }
14724
14725 // Private methods
14726
14727 function generateRandomPhrase() {
14728 if (!hasStrongRandom()) {
14729 var errorText = "This browser does not support strong randomness";
14730 showValidationError(errorText);
14731 return;
14732 }
14733 var numWords = parseInt(DOM.strength.val());
14734 // Check strength is an integer
14735 if (isNaN(numWords)) {
14736 DOM.strength.val("12");
14737 numWords = 12;
14738 }
14739 // Check strength is a multiple of 32, if not round it down
14740 if (numWords % 3 != 0) {
14741 numWords = Math.floor(numWords / 3) * 3;
14742 DOM.strength.val(numWords);
14743 }
14744 // Check strength is at least 32
14745 if (numWords == 0) {
14746 numWords = 3;
14747 DOM.strength.val(numWords);
14748 }
14749 var strength = numWords / 3 * 32;
14750 var words = mnemonic.generate(strength);
14751 DOM.phrase.val(words);
14752 return words;
14753 }
14754
14755 function calcBip32Seed(phrase, passphrase, path) {
14756 var seed = mnemonic.toSeed(phrase, passphrase);
14757 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14758 bip32ExtendedKey = bip32RootKey;
14759 // Derive the key from the path
14760 var pathBits = path.split("/");
14761 for (var i=0; i<pathBits.length; i++) {
14762 var bit = pathBits[i];
14763 var index = parseInt(bit);
14764 if (isNaN(index)) {
14765 continue;
14766 }
14767 var hardened = bit[bit.length-1] == "'";
14768 if (hardened) {
14769 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14770 }
14771 else {
14772 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14773 }
14774 }
14775 }
14776
14777 function showValidationError(errorText) {
14778 DOM.feedback
14779 .text(errorText)
14780 .show();
14781 }
14782
14783 function hideValidationError() {
14784 DOM.feedback
14785 .text("")
14786 .hide();
14787 }
14788
14789 function findPhraseErrors(phrase) {
14790 // TODO make this right
14791 // Preprocess the words
14792 phrase = mnemonic.normalizeString(phrase);
14793 var parts = phrase.split(" ");
14794 var proper = [];
14795 for (var i=0; i<parts.length; i++) {
14796 var part = parts[i];
14797 if (part.length > 0) {
14798 // TODO check that lowercasing is always valid to do
14799 proper.push(part.toLowerCase());
14800 }
14801 }
14802 // TODO some levenstein on the words
14803 var properPhrase = proper.join(' ');
14804 // Check the words are valid
14805 var isValid = mnemonic.check(properPhrase);
14806 if (!isValid) {
14807 return "Invalid mnemonic";
14808 }
14809 return false;
14810 }
14811
14812 function findDerivationPathErrors(path) {
14813 // TODO
14814 return false;
14815 }
14816
14817 function displayBip32Info() {
14818 // Display the key
14819 var rootKey = bip32RootKey.toBase58();
14820 DOM.rootKey.val(rootKey);
14821 var extendedPrivKey = bip32ExtendedKey.toBase58();
14822 DOM.extendedPrivKey.val(extendedPrivKey);
14823 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14824 DOM.extendedPubKey.val(extendedPubKey);
14825 // Display the addresses and privkeys
14826 clearAddressesList();
14827 displayAddresses(0, 20);
14828 }
14829
14830 function displayAddresses(start, total) {
14831 for (var i=0; i<total; i++) {
14832 var index = i + start;
14833 new TableRow(index);
14834 }
14835 }
14836
14837 function TableRow(index) {
14838
14839 function init() {
14840 calculateValues();
14841 }
14842
14843 function calculateValues() {
14844 setTimeout(function() {
14845 var key = bip32ExtendedKey.derive(index);
14846 var address = key.getAddress().toString();
14847 var privkey = key.privKey.toWIF(network);
14848 addAddressToList(index, address, privkey);
14849 }, 50)
14850 }
14851
14852 init();
14853
14854 }
14855
14856 function showMore() {
14857 var start = DOM.addresses.children().length;
14858 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14859 if (isNaN(rowsToAdd)) {
14860 rowsToAdd = 20;
14861 DOM.rowsToAdd.val("20");
14862 }
14863 if (rowsToAdd > 200) {
14864 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14865 msg += "Do you want to continue?";
14866 if (!confirm(msg)) {
14867 return;
14868 }
14869 }
14870 displayAddresses(start, rowsToAdd);
14871 }
14872
14873 function clearDisplay() {
14874 clearAddressesList();
14875 clearKey();
14876 hideValidationError();
14877 }
14878
14879 function clearAddressesList() {
14880 DOM.addresses.empty();
14881 }
14882
14883 function clearKey() {
14884 DOM.rootKey.val("");
14885 DOM.extendedPrivKey.val("");
14886 DOM.extendedPubKey.val("");
14887 }
14888
14889 function addAddressToList(index, address, privkey) {
14890 var row = $(addressRowTemplate.html());
14891 // Elements
14892 var indexCell = row.find(".index span");
14893 var addressCell = row.find(".address span");
14894 var privkeyCell = row.find(".privkey span");
14895 // Content
14896 indexCell.text(index);
14897 addressCell.text(address);
14898 privkeyCell.text(privkey);
14899 // Visibility
14900 if (!showIndex) {
14901 indexCell.addClass("invisible");
14902 }
14903 if (!showAddress) {
14904 addressCell.addClass("invisible");
14905 }
14906 if (!showPrivKey) {
14907 privkeCell.addClass("invisible");
14908 }
14909 DOM.addresses.append(row);
14910 }
14911
14912 function hasStrongRandom() {
14913 return 'crypto' in window && window['crypto'] !== null;
14914 }
14915
14916 function disableForms() {
14917 $("form").on("submit", function(e) {
14918 e.preventDefault();
14919 });
14920 }
14921
14922 function setBip44DerivationPath() {
14923 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14924 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14925 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14926 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14927 var path = "m/";
14928 path += purpose + "'/";
14929 path += coin + "'/";
14930 path += account + "'/";
14931 path += change;
14932 DOM.bip44path.val(path);
14933 }
14934
14935 function parseIntNoNaN(val, defaultVal) {
14936 var v = parseInt(val);
14937 if (isNaN(v)) {
14938 return defaultVal;
14939 }
14940 return v;
14941 }
14942
14943 function showPending() {
14944 DOM.feedback
14945 .text("Calculating...")
14946 .show();
14947 }
14948
14949 function hidePending() {
14950 DOM.feedback
14951 .text("")
14952 .hide();
14953 }
14954
14955 function populateNetworkSelect() {
14956 for (var i=0; i<networks.length; i++) {
14957 var network = networks[i];
14958 var option = $("<option>");
14959 option.attr("value", i);
14960 option.text(network.name);
14961 DOM.phraseNetwork.append(option);
14962 }
14963 }
14964
14965 var networks = [
14966 {
14967 name: "Bitcoin",
14968 onSelect: function() {
14969 network = bitcoin.networks.bitcoin;
14970 DOM.bip44coin.val(0);
14971 DOM.myceliumPath.val("m/44'/0'/0'/0");
14972 },
14973 },
14974 {
14975 name: "Bitcoin Testnet",
14976 onSelect: function() {
14977 network = bitcoin.networks.testnet;
14978 DOM.bip44coin.val(1);
14979 DOM.myceliumPath.val("m/44'/1'/0'/0");
14980 },
14981 },
14982 {
14983 name: "Litecoin",
14984 onSelect: function() {
14985 network = bitcoin.networks.litecoin;
14986 DOM.bip44coin.val(2);
14987 },
14988 },
14989 {
14990 name: "Dogecoin",
14991 onSelect: function() {
14992 network = bitcoin.networks.dogecoin;
14993 DOM.bip44coin.val(3);
14994 },
14995 },
14996 ]
14997
14998 init();
14999
15000 })();
15001 </script>
15002 </body>
15003 </html>