]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Derivation Path global replaced with function
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
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)
ab78acc6
IC
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" />
3af2954a 15
ab78acc6
IC
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 }
d5dc92fd
IC
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
ab78acc6
IC
47 </style>
48 </head>
49 <body>
50 <div class="container">
3af2954a 51
ab78acc6
IC
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
18531979
IC
73 <select id="strength" class="strength form-control">
74 <option val="3">3</option>
75 <option val="6">6</option>
76 <option val="9">9</option>
77 <option val="12">12</option>
78 <option val="15" selected>15</option>
79 <option val="18">18</option>
80 <option val="21">21</option>
81 <option val="24">24</option>
82 </select>
ab78acc6
IC
83 <span class="input-group-btn">
84 <button class="btn generate">Generate Random Mnemonic</button>
85 </span>
86 </div>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
91 <div class="col-sm-10">
92 <textarea id="passphrase" class="passphrase form-control"></textarea>
93 </div>
94 </div>
73161a92
IC
95 <div class="form-group">
96 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
97 <div class="col-sm-10">
98 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
99 </div>
100 </div>
ab78acc6
IC
101 <div class="form-group">
102 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
103 <div class="col-sm-10">
104 <select id="network-phrase" class="network form-control">
105 <!-- populated by javascript -->
106 </select>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
111 <div class="col-sm-10">
112 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
113 </div>
114 </div>
115 </form>
116 </div>
117 </div>
3af2954a 118
ab78acc6 119 <hr>
3af2954a 120
ab78acc6
IC
121 <div class="row">
122 <div class="col-md-12">
123 <h2>Derivation Path</h2>
124 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 125 <li id="bip44-tab" class="active">
ab78acc6
IC
126 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
127 </li>
128 <li id="bip32-tab">
129 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
130 </li>
131 </ul>
132 <div class="derivation-type tab-content">
d5dc92fd 133 <div id="bip44" class="tab-pane active">
ab78acc6
IC
134 <form class="form-horizontal" role="form">
135 <br>
136 <div class="col-sm-2"></div>
137 <div class="col-sm-10">
138 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
139 </div>
140 <div class="form-group">
141 <label for="purpose" class="col-sm-2 control-label">
142 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
143 </label>
144 <div class="col-sm-10">
145 <input id="purpose" type="text" class="purpose form-control" value="44">
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="coin" class="col-sm-2 control-label">
150 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
151 </label>
152 <div class="col-sm-10">
153 <input id="coin" type="text" class="coin form-control" value="0">
154 </div>
155 </div>
156 <div class="form-group">
157 <label for="account" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="account" type="text" class="account form-control" value="0">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="change" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="change" type="text" class="change form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
176 </div>
177 </div>
178 </form>
179 </div>
180 <div id="bip32" class="tab-pane">
181 <form class="form-horizontal" role="form">
182 <br>
183 <div class="col-sm-2"></div>
184 <div class="col-sm-10">
185 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
186 </div>
187 <div class="form-group">
188 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
189 <div class="col-sm-10">
190 <input id="bip32-path" type="text" class="path form-control" value="m/0">
191 </div>
192 </div>
d5dc92fd
IC
193 <div class="form-group">
194 <label class="col-sm-2 control-label">Hive Wallet</label>
195 <div class="col-sm-10">
196 <p class="form-control no-border">
197 Use path <code>m/0'/0</code>.
198 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
199 </p>
200 </div>
201 </div>
202 <div class="form-group">
203 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
204 <div class="col-sm-10">
205 <p class="form-control no-border">
206 Use path <code>m/44'/0'/0'/0</code>.
207 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
208 </p>
209 </div>
210 </div>
ab78acc6
IC
211 </form>
212 </div>
213 </div>
214 <form class="form-horizontal" role="form">
215 <div class="form-group">
216 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
217 <div class="col-sm-10">
218 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
219 </div>
220 </div>
221 <div class="form-group">
222 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
223 <div class="col-sm-10">
224 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
225 </div>
226 </div>
227 </form>
228 </div>
229 </div>
3af2954a 230
ab78acc6 231 <hr>
3af2954a 232
ab78acc6
IC
233 <div class="row">
234 <div class="col-md-12">
235 <h2>Derived Addresses</h2>
236 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
237 <table class="table table-striped">
238 <thead>
239 <th>
240 <div class="input-group">
ae30fed8 241 Path&nbsp;&nbsp;
ab78acc6
IC
242 <button class="index-toggle">Toggle</button>
243 </div>
244 </th>
245 <th>
246 <div class="input-group">
247 Address&nbsp;&nbsp;
248 <button class="address-toggle">Toggle</button>
249 </div>
250 </th>
251 <th>
252 <div class="input-group">
253 Private Key&nbsp;&nbsp;
254 <button class="private-key-toggle">Toggle</button>
255 </div>
256 </th>
257 </thead>
258 <tbody class="addresses">
259 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
260 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
261 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
262 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
263 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
264 </tbody>
265 </table>
266 </div>
267 </div>
268 <span>Show next </button>
269 <input type="number" class="rows-to-add" value="20">
270 <button class="more">Show</button>
3af2954a 271
ab78acc6 272 <hr>
3af2954a 273
ab78acc6
IC
274 <div class="row">
275 <div class="col-md-12">
276 <h2>More info</h2>
277 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
278 <p>
279 Read more at the
280 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
281 </p>
282 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
283 <p>
284 Read more at the
285 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
286 and see the demo at
287 <a href="http://bip32.org/" target="_blank">bip32.org</a>
288 </p>
289 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
290 <p>
291 Read more at the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
293 </p>
294 <h3>Private Keys</h3>
295 <p>
296 Use private keys at
297 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
298 but be careful - it can be easy to make mistakes if you
299 don't know what you're doing
300 </p>
301 </div>
302 </div>
3af2954a 303
ab78acc6 304 <hr>
3af2954a 305
ab78acc6
IC
306 <div class="row">
307 <div class="col-md-12">
3af2954a 308
ab78acc6 309 <h2>Offline Usage</h2>
3af2954a 310
ab78acc6
IC
311 <p>
312 You can use this tool without having to be online.
313 </p>
314 <p>
315 In your browser, select file save-as, and save this page
316 as a file.
317 </p>
318 <p>
319 Double-click that file to open it in a browser
320 on any offline computer.
321 </p>
322 <p>
323 Alternatively, download it from
324 <a href="https://github.com/dcpos/bip39">
325 https://github.com/dcpos/bip39
326 </a>
3af2954a 327
ab78acc6
IC
328 </div>
329 </div>
3af2954a 330
ab78acc6 331 <hr>
3af2954a 332
ab78acc6
IC
333 <div class="row">
334 <div class="col-md-12">
3af2954a 335
ab78acc6 336 <h2>This project is 100% open-source code</h2>
3af2954a 337
ab78acc6
IC
338 <p>
339 <span>Get the source code at - </span>
340 <a href="https://github.com/dcpos/bip39" target="_blank">
341 https://github.com/dcpos/bip39
342 </a>
343 </p>
3af2954a 344
ab78acc6 345 <h3>Libraries</h3>
3af2954a 346
ab78acc6
IC
347 <p>
348 <span>BitcoinJS - </span>
349 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
350 https://github.com/bitcoinjs/bitcoinjs-lib
351 </a>
352 </p>
3af2954a 353
ab78acc6
IC
354 <p>
355 <span>jsBIP39 - </span>
356 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
357 https://github.com/iancoleman/jsbip39
358 </a>
359 </p>
3af2954a 360
ab78acc6
IC
361 <p>
362 <span>sjcl - </span>
363 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
364 https://github.com/bitwiseshiftleft/sjcl
365 </a>
366 </p>
3af2954a 367
ab78acc6
IC
368 <p>
369 <span>jQuery - </span>
370 <a href="https://jquery.com/" target="_blank">
371 https://jquery.com/
372 </a>
373 </p>
3af2954a 374
ab78acc6
IC
375 <p>
376 <span>Twitter Bootstrap - </span>
377 <a href="http://getbootstrap.com/" target="_blank">
378 http://getbootstrap.com/
379 </a>
380 </p>
3af2954a 381
ab78acc6
IC
382 </div>
383 </div>
3af2954a 384
ab78acc6 385 </div>
3af2954a 386
ab78acc6
IC
387 <div class="feedback-container">
388 <div class="feedback">Loading...</div>
389 </div>
3af2954a 390
ab78acc6
IC
391 <script type="text/template" id="address-row-template">
392 <tr>
393 <td class="index"><span></span></td>
394 <td class="address"><span></span></td>
395 <td class="privkey"><span></span></td>
396 </tr>
397 </script>
398 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
399!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
400},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
401},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
402</script>
403 <script>/*!
404 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
405 * Copyright 2011-2014 Twitter, Inc.
406 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
407 */
408if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
409 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
410// (public) Constructor
411function BigInteger(a, b, c) {
412 if (!(this instanceof BigInteger))
413 return new BigInteger(a, b, c)
3af2954a 414
ab78acc6
IC
415 if (a != null) {
416 if ("number" == typeof a) this.fromNumber(a, b, c)
417 else if (b == null && "string" != typeof a) this.fromString(a, 256)
418 else this.fromString(a, b)
419 }
420}
3af2954a 421
ab78acc6 422var proto = BigInteger.prototype
3af2954a 423
ab78acc6
IC
424// duck-typed isBigInteger
425proto.__bigi = require('../package.json').version
426BigInteger.isBigInteger = function (obj, check_ver) {
427 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
428}
3af2954a 429
ab78acc6
IC
430// Bits per digit
431var dbits
3af2954a 432
ab78acc6
IC
433// am: Compute w_j += (x*this_i), propagate carries,
434// c is initial carry, returns final carry.
435// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
436// We need to select the fastest one that works in this environment.
3af2954a 437
ab78acc6
IC
438// am1: use a single mult and divide to get the high bits,
439// max digit bits should be 26 because
440// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
441function am1(i, x, w, j, c, n) {
442 while (--n >= 0) {
443 var v = x * this[i++] + w[j] + c
444 c = Math.floor(v / 0x4000000)
445 w[j++] = v & 0x3ffffff
3af2954a 446 }
ab78acc6
IC
447 return c
448}
449// am2 avoids a big mult-and-extract completely.
450// Max digit bits should be <= 30 because we do bitwise ops
451// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
452function am2(i, x, w, j, c, n) {
453 var xl = x & 0x7fff,
454 xh = x >> 15
455 while (--n >= 0) {
456 var l = this[i] & 0x7fff
457 var h = this[i++] >> 15
458 var m = xh * l + h * xl
459 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
460 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
461 w[j++] = l & 0x3fffffff
462 }
463 return c
464}
465// Alternately, set max digit bits to 28 since some
466// browsers slow down when dealing with 32-bit numbers.
467function am3(i, x, w, j, c, n) {
468 var xl = x & 0x3fff,
469 xh = x >> 14
470 while (--n >= 0) {
471 var l = this[i] & 0x3fff
472 var h = this[i++] >> 14
473 var m = xh * l + h * xl
474 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
475 c = (l >> 28) + (m >> 14) + xh * h
476 w[j++] = l & 0xfffffff
3af2954a 477 }
ab78acc6
IC
478 return c
479}
3af2954a 480
ab78acc6
IC
481// wtf?
482BigInteger.prototype.am = am1
483dbits = 26
3af2954a 484
ab78acc6
IC
485BigInteger.prototype.DB = dbits
486BigInteger.prototype.DM = ((1 << dbits) - 1)
487var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 488
ab78acc6
IC
489var BI_FP = 52
490BigInteger.prototype.FV = Math.pow(2, BI_FP)
491BigInteger.prototype.F1 = BI_FP - dbits
492BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 493
ab78acc6
IC
494// Digit conversions
495var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
496var BI_RC = new Array()
497var rr, vv
498rr = "0".charCodeAt(0)
499for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
500rr = "a".charCodeAt(0)
501for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
502rr = "A".charCodeAt(0)
503for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 504
ab78acc6
IC
505function int2char(n) {
506 return BI_RM.charAt(n)
507}
3af2954a 508
ab78acc6
IC
509function intAt(s, i) {
510 var c = BI_RC[s.charCodeAt(i)]
511 return (c == null) ? -1 : c
512}
3af2954a 513
ab78acc6
IC
514// (protected) copy this to r
515function bnpCopyTo(r) {
516 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
517 r.t = this.t
518 r.s = this.s
519}
3af2954a 520
ab78acc6
IC
521// (protected) set from integer value x, -DV <= x < DV
522function bnpFromInt(x) {
523 this.t = 1
524 this.s = (x < 0) ? -1 : 0
525 if (x > 0) this[0] = x
526 else if (x < -1) this[0] = x + DV
527 else this.t = 0
528}
3af2954a 529
ab78acc6
IC
530// return bigint initialized to value
531function nbv(i) {
532 var r = new BigInteger()
533 r.fromInt(i)
534 return r
535}
3af2954a 536
ab78acc6
IC
537// (protected) set from string and radix
538function bnpFromString(s, b) {
539 var self = this
3af2954a 540
ab78acc6
IC
541 var k
542 if (b == 16) k = 4
543 else if (b == 8) k = 3
544 else if (b == 256) k = 8; // byte array
545 else if (b == 2) k = 1
546 else if (b == 32) k = 5
547 else if (b == 4) k = 2
548 else {
549 self.fromRadix(s, b)
550 return
551 }
552 self.t = 0
553 self.s = 0
554 var i = s.length,
555 mi = false,
556 sh = 0
557 while (--i >= 0) {
558 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
559 if (x < 0) {
560 if (s.charAt(i) == "-") mi = true
561 continue
562 }
563 mi = false
564 if (sh == 0)
565 self[self.t++] = x
566 else if (sh + k > self.DB) {
567 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
568 self[self.t++] = (x >> (self.DB - sh))
569 } else
570 self[self.t - 1] |= x << sh
571 sh += k
572 if (sh >= self.DB) sh -= self.DB
573 }
574 if (k == 8 && (s[0] & 0x80) != 0) {
575 self.s = -1
576 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
577 }
578 self.clamp()
579 if (mi) BigInteger.ZERO.subTo(self, self)
580}
3af2954a 581
ab78acc6
IC
582// (protected) clamp off excess high words
583function bnpClamp() {
584 var c = this.s & this.DM
585 while (this.t > 0 && this[this.t - 1] == c)--this.t
586}
3af2954a 587
ab78acc6
IC
588// (public) return string representation in given radix
589function bnToString(b) {
590 var self = this
591 if (self.s < 0) return "-" + self.negate()
592 .toString(b)
593 var k
594 if (b == 16) k = 4
595 else if (b == 8) k = 3
596 else if (b == 2) k = 1
597 else if (b == 32) k = 5
598 else if (b == 4) k = 2
599 else return self.toRadix(b)
600 var km = (1 << k) - 1,
601 d, m = false,
602 r = "",
603 i = self.t
604 var p = self.DB - (i * self.DB) % k
605 if (i-- > 0) {
606 if (p < self.DB && (d = self[i] >> p) > 0) {
607 m = true
608 r = int2char(d)
609 }
610 while (i >= 0) {
611 if (p < k) {
612 d = (self[i] & ((1 << p) - 1)) << (k - p)
613 d |= self[--i] >> (p += self.DB - k)
614 } else {
615 d = (self[i] >> (p -= k)) & km
616 if (p <= 0) {
617 p += self.DB
618 --i
619 }
620 }
621 if (d > 0) m = true
622 if (m) r += int2char(d)
3af2954a 623 }
3af2954a 624 }
ab78acc6
IC
625 return m ? r : "0"
626}
3af2954a 627
ab78acc6
IC
628// (public) -this
629function bnNegate() {
630 var r = new BigInteger()
631 BigInteger.ZERO.subTo(this, r)
632 return r
633}
3af2954a 634
ab78acc6
IC
635// (public) |this|
636function bnAbs() {
637 return (this.s < 0) ? this.negate() : this
638}
3af2954a 639
ab78acc6
IC
640// (public) return + if this > a, - if this < a, 0 if equal
641function bnCompareTo(a) {
642 var r = this.s - a.s
643 if (r != 0) return r
644 var i = this.t
645 r = i - a.t
646 if (r != 0) return (this.s < 0) ? -r : r
647 while (--i >= 0)
648 if ((r = this[i] - a[i]) != 0) return r
649 return 0
650}
3af2954a 651
ab78acc6
IC
652// returns bit length of the integer x
653function nbits(x) {
654 var r = 1,
655 t
656 if ((t = x >>> 16) != 0) {
657 x = t
658 r += 16
659 }
660 if ((t = x >> 8) != 0) {
661 x = t
662 r += 8
663 }
664 if ((t = x >> 4) != 0) {
665 x = t
666 r += 4
667 }
668 if ((t = x >> 2) != 0) {
669 x = t
670 r += 2
3af2954a 671 }
ab78acc6
IC
672 if ((t = x >> 1) != 0) {
673 x = t
674 r += 1
675 }
676 return r
677}
678
679// (public) return the number of bits in "this"
680function bnBitLength() {
681 if (this.t <= 0) return 0
682 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
683}
3af2954a 684
ab78acc6
IC
685// (public) return the number of bytes in "this"
686function bnByteLength() {
687 return this.bitLength() >> 3
688}
3af2954a 689
ab78acc6
IC
690// (protected) r = this << n*DB
691function bnpDLShiftTo(n, r) {
692 var i
693 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
694 for (i = n - 1; i >= 0; --i) r[i] = 0
695 r.t = this.t + n
696 r.s = this.s
697}
3af2954a 698
ab78acc6
IC
699// (protected) r = this >> n*DB
700function bnpDRShiftTo(n, r) {
701 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
702 r.t = Math.max(this.t - n, 0)
703 r.s = this.s
704}
3af2954a 705
ab78acc6
IC
706// (protected) r = this << n
707function bnpLShiftTo(n, r) {
708 var self = this
709 var bs = n % self.DB
710 var cbs = self.DB - bs
711 var bm = (1 << cbs) - 1
712 var ds = Math.floor(n / self.DB),
713 c = (self.s << bs) & self.DM,
714 i
715 for (i = self.t - 1; i >= 0; --i) {
716 r[i + ds + 1] = (self[i] >> cbs) | c
717 c = (self[i] & bm) << bs
718 }
719 for (i = ds - 1; i >= 0; --i) r[i] = 0
720 r[ds] = c
721 r.t = self.t + ds + 1
722 r.s = self.s
723 r.clamp()
724}
3af2954a 725
ab78acc6
IC
726// (protected) r = this >> n
727function bnpRShiftTo(n, r) {
728 var self = this
729 r.s = self.s
730 var ds = Math.floor(n / self.DB)
731 if (ds >= self.t) {
732 r.t = 0
733 return
3af2954a 734 }
ab78acc6
IC
735 var bs = n % self.DB
736 var cbs = self.DB - bs
737 var bm = (1 << bs) - 1
738 r[0] = self[ds] >> bs
739 for (var i = ds + 1; i < self.t; ++i) {
740 r[i - ds - 1] |= (self[i] & bm) << cbs
741 r[i - ds] = self[i] >> bs
742 }
743 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
744 r.t = self.t - ds
745 r.clamp()
746}
3af2954a 747
ab78acc6
IC
748// (protected) r = this - a
749function bnpSubTo(a, r) {
750 var self = this
751 var i = 0,
752 c = 0,
753 m = Math.min(a.t, self.t)
754 while (i < m) {
755 c += self[i] - a[i]
756 r[i++] = c & self.DM
757 c >>= self.DB
758 }
759 if (a.t < self.t) {
760 c -= a.s
761 while (i < self.t) {
762 c += self[i]
763 r[i++] = c & self.DM
764 c >>= self.DB
765 }
766 c += self.s
767 } else {
768 c += self.s
769 while (i < a.t) {
770 c -= a[i]
771 r[i++] = c & self.DM
772 c >>= self.DB
773 }
774 c -= a.s
775 }
776 r.s = (c < 0) ? -1 : 0
777 if (c < -1) r[i++] = self.DV + c
778 else if (c > 0) r[i++] = c
779 r.t = i
780 r.clamp()
781}
3af2954a 782
ab78acc6
IC
783// (protected) r = this * a, r != this,a (HAC 14.12)
784// "this" should be the larger one if appropriate.
785function bnpMultiplyTo(a, r) {
786 var x = this.abs(),
787 y = a.abs()
788 var i = x.t
789 r.t = i + y.t
790 while (--i >= 0) r[i] = 0
791 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
792 r.s = 0
793 r.clamp()
794 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
795}
3af2954a 796
ab78acc6
IC
797// (protected) r = this^2, r != this (HAC 14.16)
798function bnpSquareTo(r) {
799 var x = this.abs()
800 var i = r.t = 2 * x.t
801 while (--i >= 0) r[i] = 0
802 for (i = 0; i < x.t - 1; ++i) {
803 var c = x.am(i, x[i], r, 2 * i, 0, 1)
804 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
805 r[i + x.t] -= x.DV
806 r[i + x.t + 1] = 1
807 }
808 }
809 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
810 r.s = 0
811 r.clamp()
812}
3af2954a 813
ab78acc6
IC
814// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
815// r != q, this != m. q or r may be null.
816function bnpDivRemTo(m, q, r) {
817 var self = this
818 var pm = m.abs()
819 if (pm.t <= 0) return
820 var pt = self.abs()
821 if (pt.t < pm.t) {
822 if (q != null) q.fromInt(0)
823 if (r != null) self.copyTo(r)
824 return
825 }
826 if (r == null) r = new BigInteger()
827 var y = new BigInteger(),
828 ts = self.s,
829 ms = m.s
830 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
831 if (nsh > 0) {
832 pm.lShiftTo(nsh, y)
833 pt.lShiftTo(nsh, r)
834 } else {
835 pm.copyTo(y)
836 pt.copyTo(r)
837 }
838 var ys = y.t
839 var y0 = y[ys - 1]
840 if (y0 == 0) return
841 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
842 var d1 = self.FV / yt,
843 d2 = (1 << self.F1) / yt,
844 e = 1 << self.F2
845 var i = r.t,
846 j = i - ys,
847 t = (q == null) ? new BigInteger() : q
848 y.dlShiftTo(j, t)
849 if (r.compareTo(t) >= 0) {
850 r[r.t++] = 1
851 r.subTo(t, r)
852 }
853 BigInteger.ONE.dlShiftTo(ys, t)
854 t.subTo(y, y); // "negative" y so we can replace sub with am later
855 while (y.t < ys) y[y.t++] = 0
856 while (--j >= 0) {
857 // Estimate quotient digit
858 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
859 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
860 y.dlShiftTo(j, t)
861 r.subTo(t, r)
862 while (r[i] < --qd) r.subTo(t, r)
3af2954a 863 }
ab78acc6
IC
864 }
865 if (q != null) {
866 r.drShiftTo(ys, q)
867 if (ts != ms) BigInteger.ZERO.subTo(q, q)
868 }
869 r.t = ys
870 r.clamp()
871 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
872 if (ts < 0) BigInteger.ZERO.subTo(r, r)
873}
3af2954a 874
ab78acc6
IC
875// (public) this mod a
876function bnMod(a) {
877 var r = new BigInteger()
878 this.abs()
879 .divRemTo(a, null, r)
880 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
881 return r
882}
3af2954a 883
ab78acc6
IC
884// Modular reduction using "classic" algorithm
885function Classic(m) {
886 this.m = m
887}
3af2954a 888
ab78acc6
IC
889function cConvert(x) {
890 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
891 else return x
892}
893
894function cRevert(x) {
895 return x
896}
3af2954a 897
ab78acc6
IC
898function cReduce(x) {
899 x.divRemTo(this.m, null, x)
900}
3af2954a 901
ab78acc6
IC
902function cMulTo(x, y, r) {
903 x.multiplyTo(y, r)
904 this.reduce(r)
905}
3af2954a 906
ab78acc6
IC
907function cSqrTo(x, r) {
908 x.squareTo(r)
909 this.reduce(r)
910}
3af2954a 911
ab78acc6
IC
912Classic.prototype.convert = cConvert
913Classic.prototype.revert = cRevert
914Classic.prototype.reduce = cReduce
915Classic.prototype.mulTo = cMulTo
916Classic.prototype.sqrTo = cSqrTo
3af2954a 917
ab78acc6
IC
918// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
919// justification:
920// xy == 1 (mod m)
921// xy = 1+km
922// xy(2-xy) = (1+km)(1-km)
923// x[y(2-xy)] = 1-k^2m^2
924// x[y(2-xy)] == 1 (mod m^2)
925// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
926// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
927// JS multiply "overflows" differently from C/C++, so care is needed here.
928function bnpInvDigit() {
929 if (this.t < 1) return 0
930 var x = this[0]
931 if ((x & 1) == 0) return 0
932 var y = x & 3; // y == 1/x mod 2^2
933 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
934 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
935 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
936 // last step - calculate inverse mod DV directly
937 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
938 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
939 // we really want the negative inverse, and -DV < y < DV
940 return (y > 0) ? this.DV - y : -y
941}
3af2954a 942
ab78acc6
IC
943// Montgomery reduction
944function Montgomery(m) {
945 this.m = m
946 this.mp = m.invDigit()
947 this.mpl = this.mp & 0x7fff
948 this.mph = this.mp >> 15
949 this.um = (1 << (m.DB - 15)) - 1
950 this.mt2 = 2 * m.t
951}
3af2954a 952
ab78acc6
IC
953// xR mod m
954function montConvert(x) {
955 var r = new BigInteger()
956 x.abs()
957 .dlShiftTo(this.m.t, r)
958 r.divRemTo(this.m, null, r)
959 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
960 return r
961}
3af2954a 962
ab78acc6
IC
963// x/R mod m
964function montRevert(x) {
965 var r = new BigInteger()
966 x.copyTo(r)
967 this.reduce(r)
968 return r
969}
3af2954a 970
ab78acc6
IC
971// x = x/R mod m (HAC 14.32)
972function montReduce(x) {
973 while (x.t <= this.mt2) // pad x so am has enough room later
974 x[x.t++] = 0
975 for (var i = 0; i < this.m.t; ++i) {
976 // faster way of calculating u0 = x[i]*mp mod DV
977 var j = x[i] & 0x7fff
978 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
979 // use am to combine the multiply-shift-add into one call
980 j = i + this.m.t
981 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
982 // propagate carry
983 while (x[j] >= x.DV) {
984 x[j] -= x.DV
985 x[++j]++
986 }
987 }
988 x.clamp()
989 x.drShiftTo(this.m.t, x)
990 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
991}
3af2954a 992
ab78acc6
IC
993// r = "x^2/R mod m"; x != r
994function montSqrTo(x, r) {
995 x.squareTo(r)
996 this.reduce(r)
997}
3af2954a 998
ab78acc6
IC
999// r = "xy/R mod m"; x,y != r
1000function montMulTo(x, y, r) {
1001 x.multiplyTo(y, r)
1002 this.reduce(r)
1003}
3af2954a 1004
ab78acc6
IC
1005Montgomery.prototype.convert = montConvert
1006Montgomery.prototype.revert = montRevert
1007Montgomery.prototype.reduce = montReduce
1008Montgomery.prototype.mulTo = montMulTo
1009Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1010
ab78acc6
IC
1011// (protected) true iff this is even
1012function bnpIsEven() {
1013 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1014}
3af2954a 1015
ab78acc6
IC
1016// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1017function bnpExp(e, z) {
1018 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1019 var r = new BigInteger(),
1020 r2 = new BigInteger(),
1021 g = z.convert(this),
1022 i = nbits(e) - 1
1023 g.copyTo(r)
1024 while (--i >= 0) {
1025 z.sqrTo(r, r2)
1026 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1027 else {
1028 var t = r
1029 r = r2
1030 r2 = t
3af2954a 1031 }
3af2954a 1032 }
ab78acc6
IC
1033 return z.revert(r)
1034}
3af2954a 1035
ab78acc6
IC
1036// (public) this^e % m, 0 <= e < 2^32
1037function bnModPowInt(e, m) {
1038 var z
1039 if (e < 256 || m.isEven()) z = new Classic(m)
1040 else z = new Montgomery(m)
1041 return this.exp(e, z)
1042}
3af2954a 1043
ab78acc6
IC
1044// protected
1045proto.copyTo = bnpCopyTo
1046proto.fromInt = bnpFromInt
1047proto.fromString = bnpFromString
1048proto.clamp = bnpClamp
1049proto.dlShiftTo = bnpDLShiftTo
1050proto.drShiftTo = bnpDRShiftTo
1051proto.lShiftTo = bnpLShiftTo
1052proto.rShiftTo = bnpRShiftTo
1053proto.subTo = bnpSubTo
1054proto.multiplyTo = bnpMultiplyTo
1055proto.squareTo = bnpSquareTo
1056proto.divRemTo = bnpDivRemTo
1057proto.invDigit = bnpInvDigit
1058proto.isEven = bnpIsEven
1059proto.exp = bnpExp
3af2954a 1060
ab78acc6
IC
1061// public
1062proto.toString = bnToString
1063proto.negate = bnNegate
1064proto.abs = bnAbs
1065proto.compareTo = bnCompareTo
1066proto.bitLength = bnBitLength
1067proto.byteLength = bnByteLength
1068proto.mod = bnMod
1069proto.modPowInt = bnModPowInt
3af2954a 1070
ab78acc6
IC
1071// (public)
1072function bnClone() {
1073 var r = new BigInteger()
1074 this.copyTo(r)
1075 return r
1076}
3af2954a 1077
ab78acc6
IC
1078// (public) return value as integer
1079function bnIntValue() {
1080 if (this.s < 0) {
1081 if (this.t == 1) return this[0] - this.DV
1082 else if (this.t == 0) return -1
1083 } else if (this.t == 1) return this[0]
1084 else if (this.t == 0) return 0
1085 // assumes 16 < DB < 32
1086 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1087}
3af2954a 1088
ab78acc6
IC
1089// (public) return value as byte
1090function bnByteValue() {
1091 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1092}
3af2954a 1093
ab78acc6
IC
1094// (public) return value as short (assumes DB>=16)
1095function bnShortValue() {
1096 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1097}
3af2954a 1098
ab78acc6
IC
1099// (protected) return x s.t. r^x < DV
1100function bnpChunkSize(r) {
1101 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1102}
3af2954a 1103
ab78acc6
IC
1104// (public) 0 if this == 0, 1 if this > 0
1105function bnSigNum() {
1106 if (this.s < 0) return -1
1107 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1108 else return 1
1109}
3af2954a 1110
ab78acc6
IC
1111// (protected) convert to radix string
1112function bnpToRadix(b) {
1113 if (b == null) b = 10
1114 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1115 var cs = this.chunkSize(b)
1116 var a = Math.pow(b, cs)
1117 var d = nbv(a),
1118 y = new BigInteger(),
1119 z = new BigInteger(),
1120 r = ""
1121 this.divRemTo(d, y, z)
1122 while (y.signum() > 0) {
1123 r = (a + z.intValue())
1124 .toString(b)
1125 .substr(1) + r
1126 y.divRemTo(d, y, z)
1127 }
1128 return z.intValue()
1129 .toString(b) + r
1130}
3af2954a 1131
ab78acc6
IC
1132// (protected) convert from radix string
1133function bnpFromRadix(s, b) {
1134 var self = this
1135 self.fromInt(0)
1136 if (b == null) b = 10
1137 var cs = self.chunkSize(b)
1138 var d = Math.pow(b, cs),
1139 mi = false,
1140 j = 0,
1141 w = 0
1142 for (var i = 0; i < s.length; ++i) {
1143 var x = intAt(s, i)
1144 if (x < 0) {
1145 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1146 continue
1147 }
1148 w = b * w + x
1149 if (++j >= cs) {
1150 self.dMultiply(d)
1151 self.dAddOffset(w, 0)
1152 j = 0
1153 w = 0
1154 }
1155 }
1156 if (j > 0) {
1157 self.dMultiply(Math.pow(b, j))
1158 self.dAddOffset(w, 0)
1159 }
1160 if (mi) BigInteger.ZERO.subTo(self, self)
1161}
3af2954a 1162
ab78acc6
IC
1163// (protected) alternate constructor
1164function bnpFromNumber(a, b, c) {
1165 var self = this
1166 if ("number" == typeof b) {
1167 // new BigInteger(int,int,RNG)
1168 if (a < 2) self.fromInt(1)
1169 else {
1170 self.fromNumber(a, c)
1171 if (!self.testBit(a - 1)) // force MSB set
1172 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1173 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1174 while (!self.isProbablePrime(b)) {
1175 self.dAddOffset(2, 0)
1176 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1177 }
1178 }
1179 } else {
1180 // new BigInteger(int,RNG)
1181 var x = new Array(),
1182 t = a & 7
1183 x.length = (a >> 3) + 1
1184 b.nextBytes(x)
1185 if (t > 0) x[0] &= ((1 << t) - 1)
1186 else x[0] = 0
1187 self.fromString(x, 256)
3af2954a 1188 }
ab78acc6 1189}
3af2954a 1190
ab78acc6
IC
1191// (public) convert to bigendian byte array
1192function bnToByteArray() {
1193 var self = this
1194 var i = self.t,
1195 r = new Array()
1196 r[0] = self.s
1197 var p = self.DB - (i * self.DB) % 8,
1198 d, k = 0
1199 if (i-- > 0) {
1200 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1201 r[k++] = d | (self.s << (self.DB - p))
1202 while (i >= 0) {
1203 if (p < 8) {
1204 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1205 d |= self[--i] >> (p += self.DB - 8)
1206 } else {
1207 d = (self[i] >> (p -= 8)) & 0xff
1208 if (p <= 0) {
1209 p += self.DB
1210 --i
1211 }
1212 }
1213 if ((d & 0x80) != 0) d |= -256
1214 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1215 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1216 }
3af2954a 1217 }
ab78acc6
IC
1218 return r
1219}
3af2954a 1220
ab78acc6
IC
1221function bnEquals(a) {
1222 return (this.compareTo(a) == 0)
1223}
3af2954a 1224
ab78acc6
IC
1225function bnMin(a) {
1226 return (this.compareTo(a) < 0) ? this : a
1227}
3af2954a 1228
ab78acc6
IC
1229function bnMax(a) {
1230 return (this.compareTo(a) > 0) ? this : a
1231}
3af2954a 1232
ab78acc6
IC
1233// (protected) r = this op a (bitwise)
1234function bnpBitwiseTo(a, op, r) {
1235 var self = this
1236 var i, f, m = Math.min(a.t, self.t)
1237 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1238 if (a.t < self.t) {
1239 f = a.s & self.DM
1240 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1241 r.t = self.t
1242 } else {
1243 f = self.s & self.DM
1244 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1245 r.t = a.t
3af2954a 1246 }
ab78acc6
IC
1247 r.s = op(self.s, a.s)
1248 r.clamp()
1249}
3af2954a 1250
ab78acc6
IC
1251// (public) this & a
1252function op_and(x, y) {
1253 return x & y
1254}
3af2954a 1255
ab78acc6
IC
1256function bnAnd(a) {
1257 var r = new BigInteger()
1258 this.bitwiseTo(a, op_and, r)
1259 return r
1260}
3af2954a 1261
ab78acc6
IC
1262// (public) this | a
1263function op_or(x, y) {
1264 return x | y
1265}
3af2954a 1266
ab78acc6
IC
1267function bnOr(a) {
1268 var r = new BigInteger()
1269 this.bitwiseTo(a, op_or, r)
1270 return r
1271}
3af2954a 1272
ab78acc6
IC
1273// (public) this ^ a
1274function op_xor(x, y) {
1275 return x ^ y
1276}
3af2954a 1277
ab78acc6
IC
1278function bnXor(a) {
1279 var r = new BigInteger()
1280 this.bitwiseTo(a, op_xor, r)
1281 return r
1282}
3af2954a 1283
ab78acc6
IC
1284// (public) this & ~a
1285function op_andnot(x, y) {
1286 return x & ~y
1287}
3af2954a 1288
ab78acc6
IC
1289function bnAndNot(a) {
1290 var r = new BigInteger()
1291 this.bitwiseTo(a, op_andnot, r)
1292 return r
1293}
3af2954a 1294
ab78acc6
IC
1295// (public) ~this
1296function bnNot() {
1297 var r = new BigInteger()
1298 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1299 r.t = this.t
1300 r.s = ~this.s
1301 return r
1302}
3af2954a 1303
ab78acc6
IC
1304// (public) this << n
1305function bnShiftLeft(n) {
1306 var r = new BigInteger()
1307 if (n < 0) this.rShiftTo(-n, r)
1308 else this.lShiftTo(n, r)
1309 return r
1310}
3af2954a 1311
ab78acc6
IC
1312// (public) this >> n
1313function bnShiftRight(n) {
1314 var r = new BigInteger()
1315 if (n < 0) this.lShiftTo(-n, r)
1316 else this.rShiftTo(n, r)
1317 return r
1318}
3af2954a 1319
ab78acc6
IC
1320// return index of lowest 1-bit in x, x < 2^31
1321function lbit(x) {
1322 if (x == 0) return -1
1323 var r = 0
1324 if ((x & 0xffff) == 0) {
1325 x >>= 16
1326 r += 16
3af2954a 1327 }
ab78acc6
IC
1328 if ((x & 0xff) == 0) {
1329 x >>= 8
1330 r += 8
1331 }
1332 if ((x & 0xf) == 0) {
1333 x >>= 4
1334 r += 4
1335 }
1336 if ((x & 3) == 0) {
1337 x >>= 2
1338 r += 2
1339 }
1340 if ((x & 1) == 0)++r
1341 return r
1342}
3af2954a 1343
ab78acc6
IC
1344// (public) returns index of lowest 1-bit (or -1 if none)
1345function bnGetLowestSetBit() {
1346 for (var i = 0; i < this.t; ++i)
1347 if (this[i] != 0) return i * this.DB + lbit(this[i])
1348 if (this.s < 0) return this.t * this.DB
1349 return -1
1350}
3af2954a 1351
ab78acc6
IC
1352// return number of 1 bits in x
1353function cbit(x) {
1354 var r = 0
1355 while (x != 0) {
1356 x &= x - 1
1357 ++r
3af2954a 1358 }
ab78acc6
IC
1359 return r
1360}
3af2954a 1361
ab78acc6
IC
1362// (public) return number of set bits
1363function bnBitCount() {
1364 var r = 0,
1365 x = this.s & this.DM
1366 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1367 return r
1368}
1369
1370// (public) true iff nth bit is set
1371function bnTestBit(n) {
1372 var j = Math.floor(n / this.DB)
1373 if (j >= this.t) return (this.s != 0)
1374 return ((this[j] & (1 << (n % this.DB))) != 0)
1375}
3af2954a 1376
ab78acc6
IC
1377// (protected) this op (1<<n)
1378function bnpChangeBit(n, op) {
1379 var r = BigInteger.ONE.shiftLeft(n)
1380 this.bitwiseTo(r, op, r)
1381 return r
1382}
3af2954a 1383
ab78acc6
IC
1384// (public) this | (1<<n)
1385function bnSetBit(n) {
1386 return this.changeBit(n, op_or)
1387}
3af2954a 1388
ab78acc6
IC
1389// (public) this & ~(1<<n)
1390function bnClearBit(n) {
1391 return this.changeBit(n, op_andnot)
1392}
3af2954a 1393
ab78acc6
IC
1394// (public) this ^ (1<<n)
1395function bnFlipBit(n) {
1396 return this.changeBit(n, op_xor)
1397}
3af2954a 1398
ab78acc6
IC
1399// (protected) r = this + a
1400function bnpAddTo(a, r) {
1401 var self = this
3af2954a 1402
ab78acc6
IC
1403 var i = 0,
1404 c = 0,
1405 m = Math.min(a.t, self.t)
1406 while (i < m) {
1407 c += self[i] + a[i]
1408 r[i++] = c & self.DM
1409 c >>= self.DB
1410 }
1411 if (a.t < self.t) {
1412 c += a.s
1413 while (i < self.t) {
1414 c += self[i]
1415 r[i++] = c & self.DM
1416 c >>= self.DB
1417 }
1418 c += self.s
1419 } else {
1420 c += self.s
1421 while (i < a.t) {
1422 c += a[i]
1423 r[i++] = c & self.DM
1424 c >>= self.DB
1425 }
1426 c += a.s
1427 }
1428 r.s = (c < 0) ? -1 : 0
1429 if (c > 0) r[i++] = c
1430 else if (c < -1) r[i++] = self.DV + c
1431 r.t = i
1432 r.clamp()
1433}
3af2954a 1434
ab78acc6
IC
1435// (public) this + a
1436function bnAdd(a) {
1437 var r = new BigInteger()
1438 this.addTo(a, r)
1439 return r
1440}
3af2954a 1441
ab78acc6
IC
1442// (public) this - a
1443function bnSubtract(a) {
1444 var r = new BigInteger()
1445 this.subTo(a, r)
1446 return r
1447}
3af2954a 1448
ab78acc6
IC
1449// (public) this * a
1450function bnMultiply(a) {
1451 var r = new BigInteger()
1452 this.multiplyTo(a, r)
1453 return r
1454}
3af2954a 1455
ab78acc6
IC
1456// (public) this^2
1457function bnSquare() {
1458 var r = new BigInteger()
1459 this.squareTo(r)
1460 return r
1461}
3af2954a 1462
ab78acc6
IC
1463// (public) this / a
1464function bnDivide(a) {
1465 var r = new BigInteger()
1466 this.divRemTo(a, r, null)
1467 return r
1468}
3af2954a 1469
ab78acc6
IC
1470// (public) this % a
1471function bnRemainder(a) {
1472 var r = new BigInteger()
1473 this.divRemTo(a, null, r)
1474 return r
1475}
3af2954a 1476
ab78acc6
IC
1477// (public) [this/a,this%a]
1478function bnDivideAndRemainder(a) {
1479 var q = new BigInteger(),
1480 r = new BigInteger()
1481 this.divRemTo(a, q, r)
1482 return new Array(q, r)
1483}
3af2954a 1484
ab78acc6
IC
1485// (protected) this *= n, this >= 0, 1 < n < DV
1486function bnpDMultiply(n) {
1487 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1488 ++this.t
1489 this.clamp()
1490}
3af2954a 1491
ab78acc6
IC
1492// (protected) this += n << w words, this >= 0
1493function bnpDAddOffset(n, w) {
1494 if (n == 0) return
1495 while (this.t <= w) this[this.t++] = 0
1496 this[w] += n
1497 while (this[w] >= this.DV) {
1498 this[w] -= this.DV
1499 if (++w >= this.t) this[this.t++] = 0
1500 ++this[w]
3af2954a 1501 }
ab78acc6 1502}
3af2954a 1503
ab78acc6
IC
1504// A "null" reducer
1505function NullExp() {}
3af2954a 1506
ab78acc6
IC
1507function nNop(x) {
1508 return x
1509}
3af2954a 1510
ab78acc6
IC
1511function nMulTo(x, y, r) {
1512 x.multiplyTo(y, r)
1513}
3af2954a 1514
ab78acc6
IC
1515function nSqrTo(x, r) {
1516 x.squareTo(r)
1517}
3af2954a 1518
ab78acc6
IC
1519NullExp.prototype.convert = nNop
1520NullExp.prototype.revert = nNop
1521NullExp.prototype.mulTo = nMulTo
1522NullExp.prototype.sqrTo = nSqrTo
3af2954a 1523
ab78acc6
IC
1524// (public) this^e
1525function bnPow(e) {
1526 return this.exp(e, new NullExp())
1527}
3af2954a 1528
ab78acc6
IC
1529// (protected) r = lower n words of "this * a", a.t <= n
1530// "this" should be the larger one if appropriate.
1531function bnpMultiplyLowerTo(a, n, r) {
1532 var i = Math.min(this.t + a.t, n)
1533 r.s = 0; // assumes a,this >= 0
1534 r.t = i
1535 while (i > 0) r[--i] = 0
1536 var j
1537 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1538 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1539 r.clamp()
1540}
3af2954a 1541
ab78acc6
IC
1542// (protected) r = "this * a" without lower n words, n > 0
1543// "this" should be the larger one if appropriate.
1544function bnpMultiplyUpperTo(a, n, r) {
1545 --n
1546 var i = r.t = this.t + a.t - n
1547 r.s = 0; // assumes a,this >= 0
1548 while (--i >= 0) r[i] = 0
1549 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1550 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1551 r.clamp()
1552 r.drShiftTo(1, r)
1553}
3af2954a 1554
ab78acc6
IC
1555// Barrett modular reduction
1556function Barrett(m) {
1557 // setup Barrett
1558 this.r2 = new BigInteger()
1559 this.q3 = new BigInteger()
1560 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1561 this.mu = this.r2.divide(m)
1562 this.m = m
1563}
3af2954a 1564
ab78acc6
IC
1565function barrettConvert(x) {
1566 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1567 else if (x.compareTo(this.m) < 0) return x
1568 else {
1569 var r = new BigInteger()
1570 x.copyTo(r)
1571 this.reduce(r)
1572 return r
3af2954a 1573 }
ab78acc6 1574}
3af2954a 1575
ab78acc6
IC
1576function barrettRevert(x) {
1577 return x
1578}
3af2954a 1579
ab78acc6
IC
1580// x = x mod m (HAC 14.42)
1581function barrettReduce(x) {
1582 var self = this
1583 x.drShiftTo(self.m.t - 1, self.r2)
1584 if (x.t > self.m.t + 1) {
1585 x.t = self.m.t + 1
1586 x.clamp()
3af2954a 1587 }
ab78acc6
IC
1588 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1589 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1590 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1591 x.subTo(self.r2, x)
1592 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1593}
3af2954a 1594
ab78acc6
IC
1595// r = x^2 mod m; x != r
1596function barrettSqrTo(x, r) {
1597 x.squareTo(r)
1598 this.reduce(r)
1599}
3af2954a 1600
ab78acc6
IC
1601// r = x*y mod m; x,y != r
1602function barrettMulTo(x, y, r) {
1603 x.multiplyTo(y, r)
1604 this.reduce(r)
1605}
3af2954a 1606
ab78acc6
IC
1607Barrett.prototype.convert = barrettConvert
1608Barrett.prototype.revert = barrettRevert
1609Barrett.prototype.reduce = barrettReduce
1610Barrett.prototype.mulTo = barrettMulTo
1611Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1612
ab78acc6
IC
1613// (public) this^e % m (HAC 14.85)
1614function bnModPow(e, m) {
1615 var i = e.bitLength(),
1616 k, r = nbv(1),
1617 z
1618 if (i <= 0) return r
1619 else if (i < 18) k = 1
1620 else if (i < 48) k = 3
1621 else if (i < 144) k = 4
1622 else if (i < 768) k = 5
1623 else k = 6
1624 if (i < 8)
1625 z = new Classic(m)
1626 else if (m.isEven())
1627 z = new Barrett(m)
1628 else
1629 z = new Montgomery(m)
3af2954a 1630
ab78acc6
IC
1631 // precomputation
1632 var g = new Array(),
1633 n = 3,
1634 k1 = k - 1,
1635 km = (1 << k) - 1
1636 g[1] = z.convert(this)
1637 if (k > 1) {
1638 var g2 = new BigInteger()
1639 z.sqrTo(g[1], g2)
1640 while (n <= km) {
1641 g[n] = new BigInteger()
1642 z.mulTo(g2, g[n - 2], g[n])
1643 n += 2
1644 }
1645 }
1646
1647 var j = e.t - 1,
1648 w, is1 = true,
1649 r2 = new BigInteger(),
1650 t
1651 i = nbits(e[j]) - 1
1652 while (j >= 0) {
1653 if (i >= k1) w = (e[j] >> (i - k1)) & km
1654 else {
1655 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1656 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1657 }
3af2954a 1658
ab78acc6
IC
1659 n = k
1660 while ((w & 1) == 0) {
1661 w >>= 1
1662 --n
1663 }
1664 if ((i -= n) < 0) {
1665 i += this.DB
1666 --j
1667 }
1668 if (is1) { // ret == 1, don't bother squaring or multiplying it
1669 g[w].copyTo(r)
1670 is1 = false
1671 } else {
1672 while (n > 1) {
1673 z.sqrTo(r, r2)
1674 z.sqrTo(r2, r)
1675 n -= 2
1676 }
1677 if (n > 0) z.sqrTo(r, r2)
1678 else {
1679 t = r
1680 r = r2
1681 r2 = t
1682 }
1683 z.mulTo(r2, g[w], r)
1684 }
3af2954a 1685
ab78acc6
IC
1686 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1687 z.sqrTo(r, r2)
1688 t = r
1689 r = r2
1690 r2 = t
1691 if (--i < 0) {
1692 i = this.DB - 1
1693 --j
3af2954a 1694 }
3af2954a
IC
1695 }
1696 }
ab78acc6
IC
1697 return z.revert(r)
1698}
3af2954a 1699
ab78acc6
IC
1700// (public) gcd(this,a) (HAC 14.54)
1701function bnGCD(a) {
1702 var x = (this.s < 0) ? this.negate() : this.clone()
1703 var y = (a.s < 0) ? a.negate() : a.clone()
1704 if (x.compareTo(y) < 0) {
1705 var t = x
1706 x = y
1707 y = t
1708 }
1709 var i = x.getLowestSetBit(),
1710 g = y.getLowestSetBit()
1711 if (g < 0) return x
1712 if (i < g) g = i
1713 if (g > 0) {
1714 x.rShiftTo(g, x)
1715 y.rShiftTo(g, y)
1716 }
1717 while (x.signum() > 0) {
1718 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1719 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1720 if (x.compareTo(y) >= 0) {
1721 x.subTo(y, x)
1722 x.rShiftTo(1, x)
1723 } else {
1724 y.subTo(x, y)
1725 y.rShiftTo(1, y)
1726 }
3af2954a 1727 }
ab78acc6
IC
1728 if (g > 0) y.lShiftTo(g, y)
1729 return y
1730}
3af2954a 1731
ab78acc6
IC
1732// (protected) this % n, n < 2^26
1733function bnpModInt(n) {
1734 if (n <= 0) return 0
1735 var d = this.DV % n,
1736 r = (this.s < 0) ? n - 1 : 0
1737 if (this.t > 0)
1738 if (d == 0) r = this[0] % n
1739 else
1740 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1741 return r
1742}
3af2954a 1743
ab78acc6
IC
1744// (public) 1/this % m (HAC 14.61)
1745function bnModInverse(m) {
1746 var ac = m.isEven()
1747 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1748 var u = m.clone(),
1749 v = this.clone()
1750 var a = nbv(1),
1751 b = nbv(0),
1752 c = nbv(0),
1753 d = nbv(1)
1754 while (u.signum() != 0) {
1755 while (u.isEven()) {
1756 u.rShiftTo(1, u)
1757 if (ac) {
1758 if (!a.isEven() || !b.isEven()) {
1759 a.addTo(this, a)
1760 b.subTo(m, b)
1761 }
1762 a.rShiftTo(1, a)
1763 } else if (!b.isEven()) b.subTo(m, b)
1764 b.rShiftTo(1, b)
1765 }
1766 while (v.isEven()) {
1767 v.rShiftTo(1, v)
1768 if (ac) {
1769 if (!c.isEven() || !d.isEven()) {
1770 c.addTo(this, c)
1771 d.subTo(m, d)
1772 }
1773 c.rShiftTo(1, c)
1774 } else if (!d.isEven()) d.subTo(m, d)
1775 d.rShiftTo(1, d)
1776 }
1777 if (u.compareTo(v) >= 0) {
1778 u.subTo(v, u)
1779 if (ac) a.subTo(c, a)
1780 b.subTo(d, b)
1781 } else {
1782 v.subTo(u, v)
1783 if (ac) c.subTo(a, c)
1784 d.subTo(b, d)
1785 }
1786 }
1787 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1788 if (d.compareTo(m) >= 0) return d.subtract(m)
1789 if (d.signum() < 0) d.addTo(m, d)
1790 else return d
1791 if (d.signum() < 0) return d.add(m)
1792 else return d
1793}
1794
1795var lowprimes = [
1796 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1797 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1798 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1799 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1800 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1801 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1802 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1803 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1804 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1805 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1806 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1807]
1808
1809var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1810
1811// (public) test primality with certainty >= 1-.5^t
1812function bnIsProbablePrime(t) {
1813 var i, x = this.abs()
1814 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1815 for (i = 0; i < lowprimes.length; ++i)
1816 if (x[0] == lowprimes[i]) return true
1817 return false
3af2954a 1818 }
ab78acc6
IC
1819 if (x.isEven()) return false
1820 i = 1
1821 while (i < lowprimes.length) {
1822 var m = lowprimes[i],
1823 j = i + 1
1824 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1825 m = x.modInt(m)
1826 while (i < j) if (m % lowprimes[i++] == 0) return false
1827 }
1828 return x.millerRabin(t)
1829}
1830
1831// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1832function bnpMillerRabin(t) {
1833 var n1 = this.subtract(BigInteger.ONE)
1834 var k = n1.getLowestSetBit()
1835 if (k <= 0) return false
1836 var r = n1.shiftRight(k)
1837 t = (t + 1) >> 1
1838 if (t > lowprimes.length) t = lowprimes.length
1839 var a = new BigInteger(null)
1840 var j, bases = []
1841 for (var i = 0; i < t; ++i) {
1842 for (;;) {
1843 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1844 if (bases.indexOf(j) == -1) break
1845 }
1846 bases.push(j)
1847 a.fromInt(j)
1848 var y = a.modPow(r, this)
1849 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1850 var j = 1
1851 while (j++ < k && y.compareTo(n1) != 0) {
1852 y = y.modPowInt(2, this)
1853 if (y.compareTo(BigInteger.ONE) == 0) return false
1854 }
1855 if (y.compareTo(n1) != 0) return false
1856 }
3af2954a 1857 }
ab78acc6
IC
1858 return true
1859}
3af2954a 1860
ab78acc6
IC
1861// protected
1862proto.chunkSize = bnpChunkSize
1863proto.toRadix = bnpToRadix
1864proto.fromRadix = bnpFromRadix
1865proto.fromNumber = bnpFromNumber
1866proto.bitwiseTo = bnpBitwiseTo
1867proto.changeBit = bnpChangeBit
1868proto.addTo = bnpAddTo
1869proto.dMultiply = bnpDMultiply
1870proto.dAddOffset = bnpDAddOffset
1871proto.multiplyLowerTo = bnpMultiplyLowerTo
1872proto.multiplyUpperTo = bnpMultiplyUpperTo
1873proto.modInt = bnpModInt
1874proto.millerRabin = bnpMillerRabin
3af2954a 1875
ab78acc6
IC
1876// public
1877proto.clone = bnClone
1878proto.intValue = bnIntValue
1879proto.byteValue = bnByteValue
1880proto.shortValue = bnShortValue
1881proto.signum = bnSigNum
1882proto.toByteArray = bnToByteArray
1883proto.equals = bnEquals
1884proto.min = bnMin
1885proto.max = bnMax
1886proto.and = bnAnd
1887proto.or = bnOr
1888proto.xor = bnXor
1889proto.andNot = bnAndNot
1890proto.not = bnNot
1891proto.shiftLeft = bnShiftLeft
1892proto.shiftRight = bnShiftRight
1893proto.getLowestSetBit = bnGetLowestSetBit
1894proto.bitCount = bnBitCount
1895proto.testBit = bnTestBit
1896proto.setBit = bnSetBit
1897proto.clearBit = bnClearBit
1898proto.flipBit = bnFlipBit
1899proto.add = bnAdd
1900proto.subtract = bnSubtract
1901proto.multiply = bnMultiply
1902proto.divide = bnDivide
1903proto.remainder = bnRemainder
1904proto.divideAndRemainder = bnDivideAndRemainder
1905proto.modPow = bnModPow
1906proto.modInverse = bnModInverse
1907proto.pow = bnPow
1908proto.gcd = bnGCD
1909proto.isProbablePrime = bnIsProbablePrime
3af2954a 1910
ab78acc6
IC
1911// JSBN-specific extension
1912proto.square = bnSquare
3af2954a 1913
ab78acc6
IC
1914// constants
1915BigInteger.ZERO = nbv(0)
1916BigInteger.ONE = nbv(1)
1917BigInteger.valueOf = nbv
3af2954a 1918
ab78acc6 1919module.exports = BigInteger
3af2954a 1920
ab78acc6
IC
1921},{"../package.json":4}],2:[function(require,module,exports){
1922(function (Buffer){
1923// FIXME: Kind of a weird way to throw exceptions, consider removing
1924var assert = require('assert')
1925var BigInteger = require('./bigi')
3af2954a 1926
ab78acc6
IC
1927/**
1928 * Turns a byte array into a big integer.
1929 *
1930 * This function will interpret a byte array as a big integer in big
1931 * endian notation.
1932 */
1933BigInteger.fromByteArrayUnsigned = function(byteArray) {
1934 // BigInteger expects a DER integer conformant byte array
1935 if (byteArray[0] & 0x80) {
1936 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1937 }
1938
ab78acc6
IC
1939 return new BigInteger(byteArray)
1940}
3af2954a 1941
ab78acc6
IC
1942/**
1943 * Returns a byte array representation of the big integer.
1944 *
1945 * This returns the absolute of the contained value in big endian
1946 * form. A value of zero results in an empty array.
1947 */
1948BigInteger.prototype.toByteArrayUnsigned = function() {
1949 var byteArray = this.toByteArray()
1950 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1951}
3af2954a 1952
ab78acc6
IC
1953BigInteger.fromDERInteger = function(byteArray) {
1954 return new BigInteger(byteArray)
1955}
3af2954a 1956
ab78acc6
IC
1957/*
1958 * Converts BigInteger to a DER integer representation.
1959 *
1960 * The format for this value uses the most significant bit as a sign
1961 * bit. If the most significant bit is already set and the integer is
1962 * positive, a 0x00 is prepended.
1963 *
1964 * Examples:
1965 *
1966 * 0 => 0x00
1967 * 1 => 0x01
1968 * -1 => 0xff
1969 * 127 => 0x7f
1970 * -127 => 0x81
1971 * 128 => 0x0080
1972 * -128 => 0x80
1973 * 255 => 0x00ff
1974 * -255 => 0xff01
1975 * 16300 => 0x3fac
1976 * -16300 => 0xc054
1977 * 62300 => 0x00f35c
1978 * -62300 => 0xff0ca4
1979*/
1980BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 1981
ab78acc6
IC
1982BigInteger.fromBuffer = function(buffer) {
1983 // BigInteger expects a DER integer conformant byte array
1984 if (buffer[0] & 0x80) {
1985 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 1986
ab78acc6 1987 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1988 }
1989
ab78acc6
IC
1990 return new BigInteger(buffer)
1991}
3af2954a 1992
ab78acc6
IC
1993BigInteger.fromHex = function(hex) {
1994 if (hex === '') return BigInteger.ZERO
3af2954a 1995
ab78acc6
IC
1996 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1997 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1998 return new BigInteger(hex, 16)
1999}
3af2954a 2000
ab78acc6
IC
2001BigInteger.prototype.toBuffer = function(size) {
2002 var byteArray = this.toByteArrayUnsigned()
2003 var zeros = []
3af2954a 2004
ab78acc6
IC
2005 var padding = size - byteArray.length
2006 while (zeros.length < padding) zeros.push(0)
3af2954a 2007
ab78acc6
IC
2008 return new Buffer(zeros.concat(byteArray))
2009}
3af2954a 2010
ab78acc6
IC
2011BigInteger.prototype.toHex = function(size) {
2012 return this.toBuffer(size).toString('hex')
2013}
3af2954a 2014
ab78acc6
IC
2015}).call(this,require("buffer").Buffer)
2016},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2017var BigInteger = require('./bigi')
3af2954a 2018
ab78acc6
IC
2019//addons
2020require('./convert')
3af2954a 2021
ab78acc6
IC
2022module.exports = BigInteger
2023},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2024module.exports={
2025 "name": "bigi",
2026 "version": "1.4.0",
2027 "description": "Big integers.",
2028 "keywords": [
2029 "cryptography",
2030 "math",
2031 "bitcoin",
2032 "arbitrary",
2033 "precision",
2034 "arithmetic",
2035 "big",
2036 "integer",
2037 "int",
2038 "number",
2039 "biginteger",
2040 "bigint",
2041 "bignumber",
2042 "decimal",
2043 "float"
2044 ],
2045 "devDependencies": {
2046 "mocha": "^1.20.1",
2047 "jshint": "^2.5.1",
2048 "coveralls": "^2.10.0",
2049 "istanbul": "^0.2.11"
2050 },
2051 "repository": {
2052 "url": "https://github.com/cryptocoinjs/bigi",
2053 "type": "git"
2054 },
2055 "main": "./lib/index.js",
2056 "scripts": {
2057 "test": "_mocha -- test/*.js",
2058 "jshint": "jshint --config jshint.json lib/*.js ; true",
2059 "unit": "mocha",
2060 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2061 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2062 },
2063 "dependencies": {},
2064 "testling": {
2065 "files": "test/*.js",
2066 "harness": "mocha",
2067 "browsers": [
2068 "ie/9..latest",
2069 "firefox/latest",
2070 "chrome/latest",
2071 "safari/6.0..latest",
2072 "iphone/6.0..latest",
2073 "android-browser/4.2..latest"
2074 ]
2075 },
2076 "bugs": {
2077 "url": "https://github.com/cryptocoinjs/bigi/issues"
2078 },
2079 "homepage": "https://github.com/cryptocoinjs/bigi",
2080 "_id": "bigi@1.4.0",
2081 "dist": {
2082 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2083 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2084 },
2085 "_from": "bigi@^1.4.0",
2086 "_npmVersion": "1.4.3",
2087 "_npmUser": {
2088 "name": "jp",
2089 "email": "jprichardson@gmail.com"
2090 },
2091 "maintainers": [
2092 {
2093 "name": "jp",
2094 "email": "jprichardson@gmail.com"
2095 },
2096 {
2097 "name": "midnightlightning",
2098 "email": "boydb@midnightdesign.ws"
2099 },
2100 {
2101 "name": "sidazhang",
2102 "email": "sidazhang89@gmail.com"
2103 },
2104 {
2105 "name": "nadav",
2106 "email": "npm@shesek.info"
3af2954a 2107 }
ab78acc6
IC
2108 ],
2109 "directories": {},
2110 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2111 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2112}
3af2954a 2113
ab78acc6
IC
2114},{}],5:[function(require,module,exports){
2115// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2116//
2117// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2118//
2119// Originally from narwhal.js (http://narwhaljs.org)
2120// Copyright (c) 2009 Thomas Robinson <280north.com>
2121//
2122// Permission is hereby granted, free of charge, to any person obtaining a copy
2123// of this software and associated documentation files (the 'Software'), to
2124// deal in the Software without restriction, including without limitation the
2125// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2126// sell copies of the Software, and to permit persons to whom the Software is
2127// furnished to do so, subject to the following conditions:
2128//
2129// The above copyright notice and this permission notice shall be included in
2130// all copies or substantial portions of the Software.
2131//
2132// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2133// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2134// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2135// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2136// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2137// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2138
ab78acc6
IC
2139// when used in node, this will actually load the util module we depend on
2140// versus loading the builtin util module as happens otherwise
2141// this is a bug in node module loading as far as I am concerned
2142var util = require('util/');
3af2954a 2143
ab78acc6
IC
2144var pSlice = Array.prototype.slice;
2145var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2146
ab78acc6
IC
2147// 1. The assert module provides functions that throw
2148// AssertionError's when particular conditions are not met. The
2149// assert module must conform to the following interface.
3af2954a 2150
ab78acc6 2151var assert = module.exports = ok;
3af2954a 2152
ab78acc6
IC
2153// 2. The AssertionError is defined in assert.
2154// new assert.AssertionError({ message: message,
2155// actual: actual,
2156// expected: expected })
3af2954a 2157
ab78acc6
IC
2158assert.AssertionError = function AssertionError(options) {
2159 this.name = 'AssertionError';
2160 this.actual = options.actual;
2161 this.expected = options.expected;
2162 this.operator = options.operator;
2163 if (options.message) {
2164 this.message = options.message;
2165 this.generatedMessage = false;
2166 } else {
2167 this.message = getMessage(this);
2168 this.generatedMessage = true;
2169 }
2170 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2171
ab78acc6
IC
2172 if (Error.captureStackTrace) {
2173 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2174 }
ab78acc6
IC
2175 else {
2176 // non v8 browsers so we can have a stacktrace
2177 var err = new Error();
2178 if (err.stack) {
2179 var out = err.stack;
3af2954a 2180
ab78acc6
IC
2181 // try to strip useless frames
2182 var fn_name = stackStartFunction.name;
2183 var idx = out.indexOf('\n' + fn_name);
2184 if (idx >= 0) {
2185 // once we have located the function frame
2186 // we need to strip out everything before it (and its line)
2187 var next_line = out.indexOf('\n', idx + 1);
2188 out = out.substring(next_line + 1);
2189 }
3af2954a 2190
ab78acc6 2191 this.stack = out;
3af2954a 2192 }
3af2954a 2193 }
ab78acc6 2194};
3af2954a 2195
ab78acc6
IC
2196// assert.AssertionError instanceof Error
2197util.inherits(assert.AssertionError, Error);
3af2954a 2198
ab78acc6
IC
2199function replacer(key, value) {
2200 if (util.isUndefined(value)) {
2201 return '' + value;
2202 }
2203 if (util.isNumber(value) && !isFinite(value)) {
2204 return value.toString();
2205 }
2206 if (util.isFunction(value) || util.isRegExp(value)) {
2207 return value.toString();
2208 }
2209 return value;
2210}
3af2954a 2211
ab78acc6
IC
2212function truncate(s, n) {
2213 if (util.isString(s)) {
2214 return s.length < n ? s : s.slice(0, n);
2215 } else {
2216 return s;
2217 }
2218}
3af2954a 2219
ab78acc6
IC
2220function getMessage(self) {
2221 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2222 self.operator + ' ' +
2223 truncate(JSON.stringify(self.expected, replacer), 128);
2224}
3af2954a 2225
ab78acc6
IC
2226// At present only the three keys mentioned above are used and
2227// understood by the spec. Implementations or sub modules can pass
2228// other keys to the AssertionError's constructor - they will be
2229// ignored.
3af2954a 2230
ab78acc6
IC
2231// 3. All of the following functions must throw an AssertionError
2232// when a corresponding condition is not met, with a message that
2233// may be undefined if not provided. All assertion methods provide
2234// both the actual and expected values to the assertion error for
2235// display purposes.
3af2954a 2236
ab78acc6
IC
2237function fail(actual, expected, message, operator, stackStartFunction) {
2238 throw new assert.AssertionError({
2239 message: message,
2240 actual: actual,
2241 expected: expected,
2242 operator: operator,
2243 stackStartFunction: stackStartFunction
2244 });
2245}
3af2954a 2246
ab78acc6
IC
2247// EXTENSION! allows for well behaved errors defined elsewhere.
2248assert.fail = fail;
ebd8d4e8 2249
ab78acc6
IC
2250// 4. Pure assertion tests whether a value is truthy, as determined
2251// by !!guard.
2252// assert.ok(guard, message_opt);
2253// This statement is equivalent to assert.equal(true, !!guard,
2254// message_opt);. To test strictly for the value true, use
2255// assert.strictEqual(true, guard, message_opt);.
3af2954a 2256
ab78acc6
IC
2257function ok(value, message) {
2258 if (!value) fail(value, true, message, '==', assert.ok);
2259}
2260assert.ok = ok;
3af2954a 2261
ab78acc6
IC
2262// 5. The equality assertion tests shallow, coercive equality with
2263// ==.
2264// assert.equal(actual, expected, message_opt);
3af2954a 2265
ab78acc6
IC
2266assert.equal = function equal(actual, expected, message) {
2267 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2268};
3af2954a 2269
ab78acc6
IC
2270// 6. The non-equality assertion tests for whether two objects are not equal
2271// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2272
ab78acc6
IC
2273assert.notEqual = function notEqual(actual, expected, message) {
2274 if (actual == expected) {
2275 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2276 }
ab78acc6 2277};
3af2954a 2278
ab78acc6
IC
2279// 7. The equivalence assertion tests a deep equality relation.
2280// assert.deepEqual(actual, expected, message_opt);
3af2954a 2281
ab78acc6
IC
2282assert.deepEqual = function deepEqual(actual, expected, message) {
2283 if (!_deepEqual(actual, expected)) {
2284 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2285 }
2286};
3af2954a 2287
ab78acc6
IC
2288function _deepEqual(actual, expected) {
2289 // 7.1. All identical values are equivalent, as determined by ===.
2290 if (actual === expected) {
2291 return true;
3af2954a 2292
ab78acc6
IC
2293 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2294 if (actual.length != expected.length) return false;
3af2954a 2295
ab78acc6
IC
2296 for (var i = 0; i < actual.length; i++) {
2297 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2298 }
2299
ab78acc6 2300 return true;
3af2954a 2301
ab78acc6
IC
2302 // 7.2. If the expected value is a Date object, the actual value is
2303 // equivalent if it is also a Date object that refers to the same time.
2304 } else if (util.isDate(actual) && util.isDate(expected)) {
2305 return actual.getTime() === expected.getTime();
3af2954a 2306
ab78acc6
IC
2307 // 7.3 If the expected value is a RegExp object, the actual value is
2308 // equivalent if it is also a RegExp object with the same source and
2309 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2310 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2311 return actual.source === expected.source &&
2312 actual.global === expected.global &&
2313 actual.multiline === expected.multiline &&
2314 actual.lastIndex === expected.lastIndex &&
2315 actual.ignoreCase === expected.ignoreCase;
3af2954a 2316
ab78acc6
IC
2317 // 7.4. Other pairs that do not both pass typeof value == 'object',
2318 // equivalence is determined by ==.
2319 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2320 return actual == expected;
3af2954a 2321
ab78acc6
IC
2322 // 7.5 For all other Object pairs, including Array objects, equivalence is
2323 // determined by having the same number of owned properties (as verified
2324 // with Object.prototype.hasOwnProperty.call), the same set of keys
2325 // (although not necessarily the same order), equivalent values for every
2326 // corresponding key, and an identical 'prototype' property. Note: this
2327 // accounts for both named and indexed properties on Arrays.
2328 } else {
2329 return objEquiv(actual, expected);
3af2954a 2330 }
ab78acc6 2331}
3af2954a 2332
ab78acc6
IC
2333function isArguments(object) {
2334 return Object.prototype.toString.call(object) == '[object Arguments]';
2335}
3af2954a 2336
ab78acc6
IC
2337function objEquiv(a, b) {
2338 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2339 return false;
2340 // an identical 'prototype' property.
2341 if (a.prototype !== b.prototype) return false;
2342 // if one is a primitive, the other must be same
2343 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2344 return a === b;
3af2954a 2345 }
ab78acc6
IC
2346 var aIsArgs = isArguments(a),
2347 bIsArgs = isArguments(b);
2348 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2349 return false;
2350 if (aIsArgs) {
2351 a = pSlice.call(a);
2352 b = pSlice.call(b);
2353 return _deepEqual(a, b);
3af2954a 2354 }
ab78acc6
IC
2355 var ka = objectKeys(a),
2356 kb = objectKeys(b),
2357 key, i;
2358 // having the same number of owned properties (keys incorporates
2359 // hasOwnProperty)
2360 if (ka.length != kb.length)
2361 return false;
2362 //the same set of keys (although not necessarily the same order),
2363 ka.sort();
2364 kb.sort();
2365 //~~~cheap key test
2366 for (i = ka.length - 1; i >= 0; i--) {
2367 if (ka[i] != kb[i])
2368 return false;
3af2954a 2369 }
ab78acc6
IC
2370 //equivalent values for every corresponding key, and
2371 //~~~possibly expensive deep test
2372 for (i = ka.length - 1; i >= 0; i--) {
2373 key = ka[i];
2374 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2375 }
ab78acc6
IC
2376 return true;
2377}
2378
2379// 8. The non-equivalence assertion tests for any deep inequality.
2380// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2381
ab78acc6
IC
2382assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2383 if (_deepEqual(actual, expected)) {
2384 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2385 }
ab78acc6 2386};
3af2954a 2387
ab78acc6
IC
2388// 9. The strict equality assertion tests strict equality, as determined by ===.
2389// assert.strictEqual(actual, expected, message_opt);
3af2954a 2390
ab78acc6
IC
2391assert.strictEqual = function strictEqual(actual, expected, message) {
2392 if (actual !== expected) {
2393 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2394 }
ab78acc6 2395};
3af2954a 2396
ab78acc6
IC
2397// 10. The strict non-equality assertion tests for strict inequality, as
2398// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2399
ab78acc6
IC
2400assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2401 if (actual === expected) {
2402 fail(actual, expected, message, '!==', assert.notStrictEqual);
2403 }
2404};
3af2954a 2405
ab78acc6
IC
2406function expectedException(actual, expected) {
2407 if (!actual || !expected) {
2408 return false;
2409 }
3af2954a 2410
ab78acc6
IC
2411 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2412 return expected.test(actual);
2413 } else if (actual instanceof expected) {
2414 return true;
2415 } else if (expected.call({}, actual) === true) {
2416 return true;
3af2954a
IC
2417 }
2418
ab78acc6
IC
2419 return false;
2420}
3af2954a 2421
ab78acc6
IC
2422function _throws(shouldThrow, block, expected, message) {
2423 var actual;
3af2954a 2424
ab78acc6
IC
2425 if (util.isString(expected)) {
2426 message = expected;
2427 expected = null;
3af2954a
IC
2428 }
2429
ab78acc6
IC
2430 try {
2431 block();
2432 } catch (e) {
2433 actual = e;
3af2954a
IC
2434 }
2435
ab78acc6
IC
2436 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2437 (message ? ' ' + message : '.');
3af2954a 2438
ab78acc6
IC
2439 if (shouldThrow && !actual) {
2440 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2441 }
2442
ab78acc6
IC
2443 if (!shouldThrow && expectedException(actual, expected)) {
2444 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2445 }
2446
ab78acc6
IC
2447 if ((shouldThrow && actual && expected &&
2448 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2449 throw actual;
3af2954a 2450 }
ab78acc6 2451}
3af2954a 2452
ab78acc6
IC
2453// 11. Expected to throw an error:
2454// assert.throws(block, Error_opt, message_opt);
3af2954a 2455
ab78acc6
IC
2456assert.throws = function(block, /*optional*/error, /*optional*/message) {
2457 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2458};
3af2954a 2459
ab78acc6
IC
2460// EXTENSION! This is annoying to write outside this module.
2461assert.doesNotThrow = function(block, /*optional*/message) {
2462 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2463};
3af2954a 2464
ab78acc6 2465assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2466
ab78acc6
IC
2467var objectKeys = Object.keys || function (obj) {
2468 var keys = [];
2469 for (var key in obj) {
2470 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2471 }
ab78acc6
IC
2472 return keys;
2473};
3af2954a 2474
ab78acc6 2475},{"util/":29}],6:[function(require,module,exports){
3af2954a 2476
ab78acc6
IC
2477},{}],7:[function(require,module,exports){
2478/*!
2479 * The buffer module from node.js, for the browser.
2480 *
2481 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2482 * @license MIT
2483 */
3af2954a 2484
ab78acc6
IC
2485var base64 = require('base64-js')
2486var ieee754 = require('ieee754')
2487var isArray = require('is-array')
3af2954a 2488
ab78acc6
IC
2489exports.Buffer = Buffer
2490exports.SlowBuffer = SlowBuffer
2491exports.INSPECT_MAX_BYTES = 50
2492Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2493
ab78acc6 2494var rootParent = {}
3af2954a 2495
ab78acc6
IC
2496/**
2497 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2498 * === true Use Uint8Array implementation (fastest)
2499 * === false Use Object implementation (most compatible, even IE6)
2500 *
2501 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2502 * Opera 11.6+, iOS 4.2+.
2503 *
2504 * Due to various browser bugs, sometimes the Object implementation will be used even
2505 * when the browser supports typed arrays.
2506 *
2507 * Note:
2508 *
2509 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2510 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2511 *
2512 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2513 * on objects.
2514 *
2515 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2516 *
2517 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2518 * incorrect length in some situations.
3af2954a 2519
ab78acc6
IC
2520 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2521 * get the Object implementation, which is slower but behaves correctly.
2522 */
2523Buffer.TYPED_ARRAY_SUPPORT = (function () {
2524 function Bar () {}
2525 try {
2526 var arr = new Uint8Array(1)
2527 arr.foo = function () { return 42 }
2528 arr.constructor = Bar
2529 return arr.foo() === 42 && // typed array instances can be augmented
2530 arr.constructor === Bar && // constructor can be set
2531 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2532 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2533 } catch (e) {
2534 return false
2535 }
2536})()
3af2954a 2537
ab78acc6
IC
2538function kMaxLength () {
2539 return Buffer.TYPED_ARRAY_SUPPORT
2540 ? 0x7fffffff
2541 : 0x3fffffff
2542}
3af2954a 2543
ab78acc6
IC
2544/**
2545 * Class: Buffer
2546 * =============
2547 *
2548 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2549 * with function properties for all the node `Buffer` API functions. We use
2550 * `Uint8Array` so that square bracket notation works as expected -- it returns
2551 * a single octet.
2552 *
2553 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2554 * prototype.
2555 */
2556function Buffer (arg) {
2557 if (!(this instanceof Buffer)) {
2558 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2559 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2560 return new Buffer(arg)
3af2954a
IC
2561 }
2562
ab78acc6
IC
2563 this.length = 0
2564 this.parent = undefined
3af2954a 2565
ab78acc6
IC
2566 // Common case.
2567 if (typeof arg === 'number') {
2568 return fromNumber(this, arg)
2569 }
3af2954a 2570
ab78acc6
IC
2571 // Slightly less common case.
2572 if (typeof arg === 'string') {
2573 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2574 }
3af2954a 2575
ab78acc6
IC
2576 // Unusual.
2577 return fromObject(this, arg)
2578}
3af2954a 2579
ab78acc6
IC
2580function fromNumber (that, length) {
2581 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2582 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2583 for (var i = 0; i < length; i++) {
2584 that[i] = 0
2585 }
3af2954a 2586 }
ab78acc6
IC
2587 return that
2588}
3af2954a 2589
ab78acc6
IC
2590function fromString (that, string, encoding) {
2591 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2592
ab78acc6
IC
2593 // Assumption: byteLength() return value is always < kMaxLength.
2594 var length = byteLength(string, encoding) | 0
2595 that = allocate(that, length)
3af2954a 2596
ab78acc6
IC
2597 that.write(string, encoding)
2598 return that
2599}
3af2954a 2600
ab78acc6
IC
2601function fromObject (that, object) {
2602 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2603
ab78acc6 2604 if (isArray(object)) return fromArray(that, object)
3af2954a 2605
ab78acc6
IC
2606 if (object == null) {
2607 throw new TypeError('must start with number, buffer, array or string')
2608 }
3af2954a 2609
ab78acc6
IC
2610 if (typeof ArrayBuffer !== 'undefined') {
2611 if (object.buffer instanceof ArrayBuffer) {
2612 return fromTypedArray(that, object)
2613 }
2614 if (object instanceof ArrayBuffer) {
2615 return fromArrayBuffer(that, object)
2616 }
3af2954a
IC
2617 }
2618
ab78acc6 2619 if (object.length) return fromArrayLike(that, object)
3af2954a 2620
ab78acc6
IC
2621 return fromJsonObject(that, object)
2622}
3af2954a 2623
ab78acc6
IC
2624function fromBuffer (that, buffer) {
2625 var length = checked(buffer.length) | 0
2626 that = allocate(that, length)
2627 buffer.copy(that, 0, 0, length)
2628 return that
2629}
3af2954a 2630
ab78acc6
IC
2631function fromArray (that, array) {
2632 var length = checked(array.length) | 0
2633 that = allocate(that, length)
2634 for (var i = 0; i < length; i += 1) {
2635 that[i] = array[i] & 255
3af2954a 2636 }
ab78acc6
IC
2637 return that
2638}
3af2954a 2639
ab78acc6
IC
2640// Duplicate of fromArray() to keep fromArray() monomorphic.
2641function fromTypedArray (that, array) {
2642 var length = checked(array.length) | 0
2643 that = allocate(that, length)
2644 // Truncating the elements is probably not what people expect from typed
2645 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2646 // of the old Buffer constructor.
2647 for (var i = 0; i < length; i += 1) {
2648 that[i] = array[i] & 255
3af2954a 2649 }
ab78acc6
IC
2650 return that
2651}
3af2954a 2652
ab78acc6
IC
2653function fromArrayBuffer (that, array) {
2654 if (Buffer.TYPED_ARRAY_SUPPORT) {
2655 // Return an augmented `Uint8Array` instance, for best performance
2656 array.byteLength
2657 that = Buffer._augment(new Uint8Array(array))
2658 } else {
2659 // Fallback: Return an object instance of the Buffer class
2660 that = fromTypedArray(that, new Uint8Array(array))
2661 }
2662 return that
2663}
3af2954a 2664
ab78acc6
IC
2665function fromArrayLike (that, array) {
2666 var length = checked(array.length) | 0
2667 that = allocate(that, length)
2668 for (var i = 0; i < length; i += 1) {
2669 that[i] = array[i] & 255
3af2954a 2670 }
ab78acc6
IC
2671 return that
2672}
3af2954a 2673
ab78acc6
IC
2674// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2675// Returns a zero-length buffer for inputs that don't conform to the spec.
2676function fromJsonObject (that, object) {
2677 var array
2678 var length = 0
2679
2680 if (object.type === 'Buffer' && isArray(object.data)) {
2681 array = object.data
2682 length = checked(array.length) | 0
3af2954a 2683 }
ab78acc6 2684 that = allocate(that, length)
3af2954a 2685
ab78acc6
IC
2686 for (var i = 0; i < length; i += 1) {
2687 that[i] = array[i] & 255
3af2954a 2688 }
ab78acc6
IC
2689 return that
2690}
3af2954a 2691
ab78acc6
IC
2692function allocate (that, length) {
2693 if (Buffer.TYPED_ARRAY_SUPPORT) {
2694 // Return an augmented `Uint8Array` instance, for best performance
2695 that = Buffer._augment(new Uint8Array(length))
2696 } else {
2697 // Fallback: Return an object instance of the Buffer class
2698 that.length = length
2699 that._isBuffer = true
2700 }
3af2954a 2701
ab78acc6
IC
2702 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2703 if (fromPool) that.parent = rootParent
3af2954a 2704
ab78acc6
IC
2705 return that
2706}
3af2954a 2707
ab78acc6
IC
2708function checked (length) {
2709 // Note: cannot use `length < kMaxLength` here because that fails when
2710 // length is NaN (which is otherwise coerced to zero.)
2711 if (length >= kMaxLength()) {
2712 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2713 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2714 }
ab78acc6
IC
2715 return length | 0
2716}
3af2954a 2717
ab78acc6
IC
2718function SlowBuffer (subject, encoding) {
2719 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2720
ab78acc6
IC
2721 var buf = new Buffer(subject, encoding)
2722 delete buf.parent
2723 return buf
2724}
3af2954a 2725
ab78acc6
IC
2726Buffer.isBuffer = function isBuffer (b) {
2727 return !!(b != null && b._isBuffer)
2728}
3af2954a 2729
ab78acc6
IC
2730Buffer.compare = function compare (a, b) {
2731 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2732 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2733 }
2734
ab78acc6 2735 if (a === b) return 0
3af2954a 2736
ab78acc6
IC
2737 var x = a.length
2738 var y = b.length
3af2954a 2739
ab78acc6
IC
2740 var i = 0
2741 var len = Math.min(x, y)
2742 while (i < len) {
2743 if (a[i] !== b[i]) break
3af2954a 2744
ab78acc6
IC
2745 ++i
2746 }
3af2954a 2747
ab78acc6
IC
2748 if (i !== len) {
2749 x = a[i]
2750 y = b[i]
2751 }
3af2954a 2752
ab78acc6
IC
2753 if (x < y) return -1
2754 if (y < x) return 1
2755 return 0
2756}
3af2954a 2757
ab78acc6
IC
2758Buffer.isEncoding = function isEncoding (encoding) {
2759 switch (String(encoding).toLowerCase()) {
2760 case 'hex':
2761 case 'utf8':
2762 case 'utf-8':
2763 case 'ascii':
2764 case 'binary':
2765 case 'base64':
2766 case 'raw':
2767 case 'ucs2':
2768 case 'ucs-2':
2769 case 'utf16le':
2770 case 'utf-16le':
2771 return true
2772 default:
2773 return false
3af2954a 2774 }
ab78acc6 2775}
3af2954a 2776
ab78acc6
IC
2777Buffer.concat = function concat (list, length) {
2778 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 2779
ab78acc6
IC
2780 if (list.length === 0) {
2781 return new Buffer(0)
3af2954a
IC
2782 }
2783
ab78acc6
IC
2784 var i
2785 if (length === undefined) {
2786 length = 0
2787 for (i = 0; i < list.length; i++) {
2788 length += list[i].length
2789 }
3af2954a
IC
2790 }
2791
ab78acc6
IC
2792 var buf = new Buffer(length)
2793 var pos = 0
2794 for (i = 0; i < list.length; i++) {
2795 var item = list[i]
2796 item.copy(buf, pos)
2797 pos += item.length
2798 }
2799 return buf
2800}
3af2954a 2801
ab78acc6
IC
2802function byteLength (string, encoding) {
2803 if (typeof string !== 'string') string = '' + string
2804
2805 var len = string.length
2806 if (len === 0) return 0
2807
2808 // Use a for loop to avoid recursion
2809 var loweredCase = false
2810 for (;;) {
2811 switch (encoding) {
2812 case 'ascii':
2813 case 'binary':
2814 // Deprecated
2815 case 'raw':
2816 case 'raws':
2817 return len
2818 case 'utf8':
2819 case 'utf-8':
2820 return utf8ToBytes(string).length
2821 case 'ucs2':
2822 case 'ucs-2':
2823 case 'utf16le':
2824 case 'utf-16le':
2825 return len * 2
2826 case 'hex':
2827 return len >>> 1
2828 case 'base64':
2829 return base64ToBytes(string).length
2830 default:
2831 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2832 encoding = ('' + encoding).toLowerCase()
2833 loweredCase = true
3af2954a 2834 }
3af2954a 2835 }
ab78acc6
IC
2836}
2837Buffer.byteLength = byteLength
3af2954a 2838
ab78acc6
IC
2839// pre-set for values that may exist in the future
2840Buffer.prototype.length = undefined
2841Buffer.prototype.parent = undefined
3af2954a 2842
ab78acc6
IC
2843function slowToString (encoding, start, end) {
2844 var loweredCase = false
3af2954a 2845
ab78acc6
IC
2846 start = start | 0
2847 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 2848
ab78acc6
IC
2849 if (!encoding) encoding = 'utf8'
2850 if (start < 0) start = 0
2851 if (end > this.length) end = this.length
2852 if (end <= start) return ''
3af2954a 2853
ab78acc6
IC
2854 while (true) {
2855 switch (encoding) {
2856 case 'hex':
2857 return hexSlice(this, start, end)
3af2954a 2858
ab78acc6
IC
2859 case 'utf8':
2860 case 'utf-8':
2861 return utf8Slice(this, start, end)
3af2954a 2862
ab78acc6
IC
2863 case 'ascii':
2864 return asciiSlice(this, start, end)
3af2954a 2865
ab78acc6
IC
2866 case 'binary':
2867 return binarySlice(this, start, end)
3af2954a 2868
ab78acc6
IC
2869 case 'base64':
2870 return base64Slice(this, start, end)
3af2954a 2871
ab78acc6
IC
2872 case 'ucs2':
2873 case 'ucs-2':
2874 case 'utf16le':
2875 case 'utf-16le':
2876 return utf16leSlice(this, start, end)
3af2954a 2877
ab78acc6
IC
2878 default:
2879 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2880 encoding = (encoding + '').toLowerCase()
2881 loweredCase = true
2882 }
3af2954a 2883 }
ab78acc6 2884}
3af2954a 2885
ab78acc6
IC
2886Buffer.prototype.toString = function toString () {
2887 var length = this.length | 0
2888 if (length === 0) return ''
2889 if (arguments.length === 0) return utf8Slice(this, 0, length)
2890 return slowToString.apply(this, arguments)
2891}
3af2954a 2892
ab78acc6
IC
2893Buffer.prototype.equals = function equals (b) {
2894 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2895 if (this === b) return true
2896 return Buffer.compare(this, b) === 0
2897}
3af2954a 2898
ab78acc6
IC
2899Buffer.prototype.inspect = function inspect () {
2900 var str = ''
2901 var max = exports.INSPECT_MAX_BYTES
2902 if (this.length > 0) {
2903 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2904 if (this.length > max) str += ' ... '
3af2954a 2905 }
ab78acc6
IC
2906 return '<Buffer ' + str + '>'
2907}
3af2954a 2908
ab78acc6
IC
2909Buffer.prototype.compare = function compare (b) {
2910 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2911 if (this === b) return 0
2912 return Buffer.compare(this, b)
2913}
3af2954a 2914
ab78acc6
IC
2915Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2916 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2917 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2918 byteOffset >>= 0
3af2954a 2919
ab78acc6
IC
2920 if (this.length === 0) return -1
2921 if (byteOffset >= this.length) return -1
3af2954a 2922
ab78acc6
IC
2923 // Negative offsets start from the end of the buffer
2924 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 2925
ab78acc6
IC
2926 if (typeof val === 'string') {
2927 if (val.length === 0) return -1 // special case: looking for empty string always fails
2928 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2929 }
ab78acc6
IC
2930 if (Buffer.isBuffer(val)) {
2931 return arrayIndexOf(this, val, byteOffset)
3af2954a 2932 }
ab78acc6
IC
2933 if (typeof val === 'number') {
2934 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2935 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2936 }
ab78acc6 2937 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
2938 }
2939
ab78acc6
IC
2940 function arrayIndexOf (arr, val, byteOffset) {
2941 var foundIndex = -1
2942 for (var i = 0; byteOffset + i < arr.length; i++) {
2943 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2944 if (foundIndex === -1) foundIndex = i
2945 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 2946 } else {
ab78acc6 2947 foundIndex = -1
3af2954a 2948 }
3af2954a 2949 }
ab78acc6
IC
2950 return -1
2951 }
3af2954a 2952
ab78acc6
IC
2953 throw new TypeError('val must be string, number or Buffer')
2954}
3af2954a 2955
ab78acc6
IC
2956// `get` is deprecated
2957Buffer.prototype.get = function get (offset) {
2958 console.log('.get() is deprecated. Access using array indexes instead.')
2959 return this.readUInt8(offset)
2960}
3af2954a 2961
ab78acc6
IC
2962// `set` is deprecated
2963Buffer.prototype.set = function set (v, offset) {
2964 console.log('.set() is deprecated. Access using array indexes instead.')
2965 return this.writeUInt8(v, offset)
2966}
3af2954a 2967
ab78acc6
IC
2968function hexWrite (buf, string, offset, length) {
2969 offset = Number(offset) || 0
2970 var remaining = buf.length - offset
2971 if (!length) {
2972 length = remaining
2973 } else {
2974 length = Number(length)
2975 if (length > remaining) {
2976 length = remaining
2977 }
2978 }
3af2954a 2979
ab78acc6
IC
2980 // must be an even number of digits
2981 var strLen = string.length
2982 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 2983
ab78acc6
IC
2984 if (length > strLen / 2) {
2985 length = strLen / 2
2986 }
2987 for (var i = 0; i < length; i++) {
2988 var parsed = parseInt(string.substr(i * 2, 2), 16)
2989 if (isNaN(parsed)) throw new Error('Invalid hex string')
2990 buf[offset + i] = parsed
3af2954a 2991 }
ab78acc6
IC
2992 return i
2993}
2994
2995function utf8Write (buf, string, offset, length) {
2996 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2997}
3af2954a 2998
ab78acc6
IC
2999function asciiWrite (buf, string, offset, length) {
3000 return blitBuffer(asciiToBytes(string), buf, offset, length)
3001}
3af2954a 3002
ab78acc6
IC
3003function binaryWrite (buf, string, offset, length) {
3004 return asciiWrite(buf, string, offset, length)
3005}
3af2954a 3006
ab78acc6
IC
3007function base64Write (buf, string, offset, length) {
3008 return blitBuffer(base64ToBytes(string), buf, offset, length)
3009}
3af2954a 3010
ab78acc6
IC
3011function ucs2Write (buf, string, offset, length) {
3012 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3013}
3af2954a 3014
ab78acc6
IC
3015Buffer.prototype.write = function write (string, offset, length, encoding) {
3016 // Buffer#write(string)
3017 if (offset === undefined) {
3018 encoding = 'utf8'
3019 length = this.length
3020 offset = 0
3021 // Buffer#write(string, encoding)
3022 } else if (length === undefined && typeof offset === 'string') {
3023 encoding = offset
3024 length = this.length
3025 offset = 0
3026 // Buffer#write(string, offset[, length][, encoding])
3027 } else if (isFinite(offset)) {
3028 offset = offset | 0
3029 if (isFinite(length)) {
3030 length = length | 0
3031 if (encoding === undefined) encoding = 'utf8'
3032 } else {
3033 encoding = length
3034 length = undefined
3035 }
3036 // legacy write(string, encoding, offset, length) - remove in v0.13
3037 } else {
3038 var swap = encoding
3039 encoding = offset
3040 offset = length | 0
3041 length = swap
3af2954a
IC
3042 }
3043
ab78acc6
IC
3044 var remaining = this.length - offset
3045 if (length === undefined || length > remaining) length = remaining
3af2954a 3046
ab78acc6
IC
3047 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3048 throw new RangeError('attempt to write outside buffer bounds')
3049 }
3af2954a 3050
ab78acc6 3051 if (!encoding) encoding = 'utf8'
3af2954a 3052
ab78acc6
IC
3053 var loweredCase = false
3054 for (;;) {
3055 switch (encoding) {
3056 case 'hex':
3057 return hexWrite(this, string, offset, length)
ebd8d4e8 3058
ab78acc6
IC
3059 case 'utf8':
3060 case 'utf-8':
3061 return utf8Write(this, string, offset, length)
ebd8d4e8 3062
ab78acc6
IC
3063 case 'ascii':
3064 return asciiWrite(this, string, offset, length)
ebd8d4e8 3065
ab78acc6
IC
3066 case 'binary':
3067 return binaryWrite(this, string, offset, length)
ebd8d4e8 3068
ab78acc6
IC
3069 case 'base64':
3070 // Warning: maxLength not taken into account in base64Write
3071 return base64Write(this, string, offset, length)
ebd8d4e8 3072
ab78acc6
IC
3073 case 'ucs2':
3074 case 'ucs-2':
3075 case 'utf16le':
3076 case 'utf-16le':
3077 return ucs2Write(this, string, offset, length)
ebd8d4e8 3078
ab78acc6
IC
3079 default:
3080 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3081 encoding = ('' + encoding).toLowerCase()
3082 loweredCase = true
3083 }
3084 }
3085}
212b1b46 3086
ab78acc6
IC
3087Buffer.prototype.toJSON = function toJSON () {
3088 return {
3089 type: 'Buffer',
3090 data: Array.prototype.slice.call(this._arr || this, 0)
3091 }
3092}
212b1b46 3093
ab78acc6
IC
3094function base64Slice (buf, start, end) {
3095 if (start === 0 && end === buf.length) {
3096 return base64.fromByteArray(buf)
3097 } else {
3098 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3099 }
ab78acc6
IC
3100}
3101
3102function utf8Slice (buf, start, end) {
3103 end = Math.min(buf.length, end)
3104 var firstByte
3105 var secondByte
3106 var thirdByte
3107 var fourthByte
3108 var bytesPerSequence
3109 var tempCodePoint
3110 var codePoint
3111 var res = []
3112 var i = start
3113
3114 for (; i < end; i += bytesPerSequence) {
3115 firstByte = buf[i]
3116 codePoint = 0xFFFD
3117
3118 if (firstByte > 0xEF) {
3119 bytesPerSequence = 4
3120 } else if (firstByte > 0xDF) {
3121 bytesPerSequence = 3
3122 } else if (firstByte > 0xBF) {
3123 bytesPerSequence = 2
3124 } else {
3125 bytesPerSequence = 1
3126 }
212b1b46 3127
ab78acc6
IC
3128 if (i + bytesPerSequence <= end) {
3129 switch (bytesPerSequence) {
3130 case 1:
3131 if (firstByte < 0x80) {
3132 codePoint = firstByte
3133 }
3134 break
3135 case 2:
3136 secondByte = buf[i + 1]
3137 if ((secondByte & 0xC0) === 0x80) {
3138 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3139 if (tempCodePoint > 0x7F) {
3140 codePoint = tempCodePoint
3141 }
3142 }
3143 break
3144 case 3:
3145 secondByte = buf[i + 1]
3146 thirdByte = buf[i + 2]
3147 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3148 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3149 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3150 codePoint = tempCodePoint
3151 }
3152 }
3153 break
3154 case 4:
3155 secondByte = buf[i + 1]
3156 thirdByte = buf[i + 2]
3157 fourthByte = buf[i + 3]
3158 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3159 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3160 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3161 codePoint = tempCodePoint
3162 }
3163 }
3164 }
3165 }
212b1b46 3166
ab78acc6
IC
3167 if (codePoint === 0xFFFD) {
3168 // we generated an invalid codePoint so make sure to only advance by 1 byte
3169 bytesPerSequence = 1
3170 } else if (codePoint > 0xFFFF) {
3171 // encode to utf16 (surrogate pair dance)
3172 codePoint -= 0x10000
3173 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3174 codePoint = 0xDC00 | codePoint & 0x3FF
3175 }
212b1b46 3176
ab78acc6 3177 res.push(codePoint)
3af2954a 3178 }
212b1b46 3179
ab78acc6
IC
3180 return String.fromCharCode.apply(String, res)
3181}
212b1b46 3182
ab78acc6
IC
3183function asciiSlice (buf, start, end) {
3184 var ret = ''
3185 end = Math.min(buf.length, end)
3186
3187 for (var i = start; i < end; i++) {
3188 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3189 }
ab78acc6
IC
3190 return ret
3191}
212b1b46 3192
ab78acc6
IC
3193function binarySlice (buf, start, end) {
3194 var ret = ''
3195 end = Math.min(buf.length, end)
212b1b46 3196
ab78acc6
IC
3197 for (var i = start; i < end; i++) {
3198 ret += String.fromCharCode(buf[i])
3199 }
3200 return ret
3201}
212b1b46 3202
ab78acc6
IC
3203function hexSlice (buf, start, end) {
3204 var len = buf.length
212b1b46 3205
ab78acc6
IC
3206 if (!start || start < 0) start = 0
3207 if (!end || end < 0 || end > len) end = len
212b1b46 3208
ab78acc6
IC
3209 var out = ''
3210 for (var i = start; i < end; i++) {
3211 out += toHex(buf[i])
3212 }
3213 return out
3214}
212b1b46 3215
ab78acc6
IC
3216function utf16leSlice (buf, start, end) {
3217 var bytes = buf.slice(start, end)
3218 var res = ''
3219 for (var i = 0; i < bytes.length; i += 2) {
3220 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3221 }
3222 return res
3223}
212b1b46 3224
ab78acc6
IC
3225Buffer.prototype.slice = function slice (start, end) {
3226 var len = this.length
3227 start = ~~start
3228 end = end === undefined ? len : ~~end
212b1b46 3229
ab78acc6
IC
3230 if (start < 0) {
3231 start += len
3232 if (start < 0) start = 0
3233 } else if (start > len) {
3234 start = len
3235 }
212b1b46 3236
ab78acc6
IC
3237 if (end < 0) {
3238 end += len
3239 if (end < 0) end = 0
3240 } else if (end > len) {
3241 end = len
3242 }
212b1b46 3243
ab78acc6 3244 if (end < start) end = start
212b1b46 3245
ab78acc6
IC
3246 var newBuf
3247 if (Buffer.TYPED_ARRAY_SUPPORT) {
3248 newBuf = Buffer._augment(this.subarray(start, end))
3249 } else {
3250 var sliceLen = end - start
3251 newBuf = new Buffer(sliceLen, undefined)
3252 for (var i = 0; i < sliceLen; i++) {
3253 newBuf[i] = this[i + start]
3af2954a
IC
3254 }
3255 }
212b1b46 3256
ab78acc6 3257 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3258
ab78acc6
IC
3259 return newBuf
3260}
ebd8d4e8 3261
ab78acc6
IC
3262/*
3263 * Need to make sure that buffer isn't trying to write out of bounds.
3264 */
3265function checkOffset (offset, ext, length) {
3266 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3267 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3268}
ebd8d4e8 3269
ab78acc6
IC
3270Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3271 offset = offset | 0
3272 byteLength = byteLength | 0
3273 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3274
ab78acc6
IC
3275 var val = this[offset]
3276 var mul = 1
3277 var i = 0
3278 while (++i < byteLength && (mul *= 0x100)) {
3279 val += this[offset + i] * mul
3280 }
3af2954a 3281
ab78acc6
IC
3282 return val
3283}
3af2954a 3284
ab78acc6
IC
3285Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3286 offset = offset | 0
3287 byteLength = byteLength | 0
3288 if (!noAssert) {
3289 checkOffset(offset, byteLength, this.length)
3290 }
3af2954a 3291
ab78acc6
IC
3292 var val = this[offset + --byteLength]
3293 var mul = 1
3294 while (byteLength > 0 && (mul *= 0x100)) {
3295 val += this[offset + --byteLength] * mul
3af2954a
IC
3296 }
3297
ab78acc6
IC
3298 return val
3299}
3af2954a 3300
ab78acc6
IC
3301Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3302 if (!noAssert) checkOffset(offset, 1, this.length)
3303 return this[offset]
3304}
3af2954a 3305
ab78acc6
IC
3306Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3307 if (!noAssert) checkOffset(offset, 2, this.length)
3308 return this[offset] | (this[offset + 1] << 8)
3309}
3af2954a 3310
ab78acc6
IC
3311Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3312 if (!noAssert) checkOffset(offset, 2, this.length)
3313 return (this[offset] << 8) | this[offset + 1]
3314}
ebd8d4e8 3315
ab78acc6
IC
3316Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3317 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3318
ab78acc6
IC
3319 return ((this[offset]) |
3320 (this[offset + 1] << 8) |
3321 (this[offset + 2] << 16)) +
3322 (this[offset + 3] * 0x1000000)
3323}
3af2954a 3324
ab78acc6
IC
3325Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3326 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3327
ab78acc6
IC
3328 return (this[offset] * 0x1000000) +
3329 ((this[offset + 1] << 16) |
3330 (this[offset + 2] << 8) |
3331 this[offset + 3])
3332}
ebd8d4e8 3333
ab78acc6
IC
3334Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3335 offset = offset | 0
3336 byteLength = byteLength | 0
3337 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3338
ab78acc6
IC
3339 var val = this[offset]
3340 var mul = 1
3341 var i = 0
3342 while (++i < byteLength && (mul *= 0x100)) {
3343 val += this[offset + i] * mul
ebd8d4e8 3344 }
ab78acc6 3345 mul *= 0x80
ebd8d4e8 3346
ab78acc6
IC
3347 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3348
3349 return val
ebd8d4e8
IC
3350}
3351
ab78acc6
IC
3352Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3353 offset = offset | 0
3354 byteLength = byteLength | 0
3355 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3356
ab78acc6
IC
3357 var i = byteLength
3358 var mul = 1
3359 var val = this[offset + --i]
3360 while (i > 0 && (mul *= 0x100)) {
3361 val += this[offset + --i] * mul
3362 }
3363 mul *= 0x80
ebd8d4e8 3364
ab78acc6 3365 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3366
ab78acc6
IC
3367 return val
3368}
ebd8d4e8 3369
ab78acc6
IC
3370Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3371 if (!noAssert) checkOffset(offset, 1, this.length)
3372 if (!(this[offset] & 0x80)) return (this[offset])
3373 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3374}
ab78acc6
IC
3375
3376Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3377 if (!noAssert) checkOffset(offset, 2, this.length)
3378 var val = this[offset] | (this[offset + 1] << 8)
3379 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3380}
ab78acc6
IC
3381
3382Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset, 2, this.length)
3384 var val = this[offset + 1] | (this[offset] << 8)
3385 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3386}
3387
ab78acc6
IC
3388Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3389 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3390
ab78acc6
IC
3391 return (this[offset]) |
3392 (this[offset + 1] << 8) |
3393 (this[offset + 2] << 16) |
3394 (this[offset + 3] << 24)
ebd8d4e8 3395}
ebd8d4e8 3396
ab78acc6
IC
3397Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3398 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3399
ab78acc6
IC
3400 return (this[offset] << 24) |
3401 (this[offset + 1] << 16) |
3402 (this[offset + 2] << 8) |
3403 (this[offset + 3])
ebd8d4e8
IC
3404}
3405
ab78acc6
IC
3406Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3407 if (!noAssert) checkOffset(offset, 4, this.length)
3408 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3409}
3410
ab78acc6
IC
3411Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3412 if (!noAssert) checkOffset(offset, 4, this.length)
3413 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3414}
3415
ab78acc6
IC
3416Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3417 if (!noAssert) checkOffset(offset, 8, this.length)
3418 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3419}
3420
ab78acc6
IC
3421Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3422 if (!noAssert) checkOffset(offset, 8, this.length)
3423 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3424}
3425
ab78acc6
IC
3426function checkInt (buf, value, offset, ext, max, min) {
3427 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3428 if (value > max || value < min) throw new RangeError('value is out of bounds')
3429 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3430}
3431
ab78acc6
IC
3432Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3433 value = +value
3434 offset = offset | 0
3435 byteLength = byteLength | 0
3436 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3437
ab78acc6
IC
3438 var mul = 1
3439 var i = 0
3440 this[offset] = value & 0xFF
3441 while (++i < byteLength && (mul *= 0x100)) {
3442 this[offset + i] = (value / mul) & 0xFF
3443 }
ebd8d4e8 3444
ab78acc6 3445 return offset + byteLength
ebd8d4e8
IC
3446}
3447
ab78acc6
IC
3448Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3449 value = +value
3450 offset = offset | 0
3451 byteLength = byteLength | 0
3452 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3453
ab78acc6
IC
3454 var i = byteLength - 1
3455 var mul = 1
3456 this[offset + i] = value & 0xFF
3457 while (--i >= 0 && (mul *= 0x100)) {
3458 this[offset + i] = (value / mul) & 0xFF
3459 }
ebd8d4e8 3460
ab78acc6 3461 return offset + byteLength
ebd8d4e8
IC
3462}
3463
ab78acc6
IC
3464Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3465 value = +value
3466 offset = offset | 0
3467 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3468 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3469 this[offset] = value
3470 return offset + 1
ebd8d4e8
IC
3471}
3472
ab78acc6
IC
3473function objectWriteUInt16 (buf, value, offset, littleEndian) {
3474 if (value < 0) value = 0xffff + value + 1
3475 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3476 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3477 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3478 }
ebd8d4e8
IC
3479}
3480
ab78acc6
IC
3481Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3482 value = +value
3483 offset = offset | 0
3484 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3485 if (Buffer.TYPED_ARRAY_SUPPORT) {
3486 this[offset] = value
3487 this[offset + 1] = (value >>> 8)
3488 } else {
3489 objectWriteUInt16(this, value, offset, true)
3490 }
3491 return offset + 2
ebd8d4e8
IC
3492}
3493
ab78acc6
IC
3494Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3495 value = +value
3496 offset = offset | 0
3497 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3498 if (Buffer.TYPED_ARRAY_SUPPORT) {
3499 this[offset] = (value >>> 8)
3500 this[offset + 1] = value
3501 } else {
3502 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3503 }
ab78acc6 3504 return offset + 2
ebd8d4e8
IC
3505}
3506
ab78acc6
IC
3507function objectWriteUInt32 (buf, value, offset, littleEndian) {
3508 if (value < 0) value = 0xffffffff + value + 1
3509 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3510 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3511 }
ebd8d4e8
IC
3512}
3513
ab78acc6
IC
3514Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3515 value = +value
3516 offset = offset | 0
3517 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3518 if (Buffer.TYPED_ARRAY_SUPPORT) {
3519 this[offset + 3] = (value >>> 24)
3520 this[offset + 2] = (value >>> 16)
3521 this[offset + 1] = (value >>> 8)
3522 this[offset] = value
3523 } else {
3524 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3525 }
ab78acc6 3526 return offset + 4
ebd8d4e8
IC
3527}
3528
ab78acc6
IC
3529Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3530 value = +value
3531 offset = offset | 0
3532 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3533 if (Buffer.TYPED_ARRAY_SUPPORT) {
3534 this[offset] = (value >>> 24)
3535 this[offset + 1] = (value >>> 16)
3536 this[offset + 2] = (value >>> 8)
3537 this[offset + 3] = value
3538 } else {
3539 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3540 }
ab78acc6
IC
3541 return offset + 4
3542}
3543
3544Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3545 value = +value
3546 offset = offset | 0
3547 if (!noAssert) {
3548 var limit = Math.pow(2, 8 * byteLength - 1)
3549
3550 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3551 }
ab78acc6
IC
3552
3553 var i = 0
3554 var mul = 1
3555 var sub = value < 0 ? 1 : 0
3556 this[offset] = value & 0xFF
3557 while (++i < byteLength && (mul *= 0x100)) {
3558 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3559 }
ebd8d4e8 3560
ab78acc6 3561 return offset + byteLength
ebd8d4e8
IC
3562}
3563
ab78acc6
IC
3564Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3565 value = +value
3566 offset = offset | 0
3567 if (!noAssert) {
3568 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3569
ab78acc6
IC
3570 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3571 }
ebd8d4e8 3572
ab78acc6
IC
3573 var i = byteLength - 1
3574 var mul = 1
3575 var sub = value < 0 ? 1 : 0
3576 this[offset + i] = value & 0xFF
3577 while (--i >= 0 && (mul *= 0x100)) {
3578 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3579 }
3580
3581 return offset + byteLength
ebd8d4e8
IC
3582}
3583
ab78acc6
IC
3584Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3585 value = +value
3586 offset = offset | 0
3587 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3588 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3589 if (value < 0) value = 0xff + value + 1
3590 this[offset] = value
3591 return offset + 1
ebd8d4e8
IC
3592}
3593
ab78acc6
IC
3594Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3595 value = +value
3596 offset = offset | 0
3597 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3598 if (Buffer.TYPED_ARRAY_SUPPORT) {
3599 this[offset] = value
3600 this[offset + 1] = (value >>> 8)
3601 } else {
3602 objectWriteUInt16(this, value, offset, true)
3603 }
3604 return offset + 2
ebd8d4e8
IC
3605}
3606
ab78acc6
IC
3607Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3608 value = +value
3609 offset = offset | 0
3610 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3611 if (Buffer.TYPED_ARRAY_SUPPORT) {
3612 this[offset] = (value >>> 8)
3613 this[offset + 1] = value
3614 } else {
3615 objectWriteUInt16(this, value, offset, false)
3616 }
3617 return offset + 2
ebd8d4e8
IC
3618}
3619
ab78acc6
IC
3620Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3621 value = +value
3622 offset = offset | 0
3623 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3624 if (Buffer.TYPED_ARRAY_SUPPORT) {
3625 this[offset] = value
3626 this[offset + 1] = (value >>> 8)
3627 this[offset + 2] = (value >>> 16)
3628 this[offset + 3] = (value >>> 24)
3629 } else {
3630 objectWriteUInt32(this, value, offset, true)
3631 }
3632 return offset + 4
3633}
3634
3635Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3636 value = +value
3637 offset = offset | 0
3638 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3639 if (value < 0) value = 0xffffffff + value + 1
3640 if (Buffer.TYPED_ARRAY_SUPPORT) {
3641 this[offset] = (value >>> 24)
3642 this[offset + 1] = (value >>> 16)
3643 this[offset + 2] = (value >>> 8)
3644 this[offset + 3] = value
3645 } else {
3646 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3647 }
ab78acc6 3648 return offset + 4
ebd8d4e8
IC
3649}
3650
ab78acc6
IC
3651function checkIEEE754 (buf, value, offset, ext, max, min) {
3652 if (value > max || value < min) throw new RangeError('value is out of bounds')
3653 if (offset + ext > buf.length) throw new RangeError('index out of range')
3654 if (offset < 0) throw new RangeError('index out of range')
3655}
ebd8d4e8 3656
ab78acc6
IC
3657function writeFloat (buf, value, offset, littleEndian, noAssert) {
3658 if (!noAssert) {
3659 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3660 }
3661 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3662 return offset + 4
3663}
ebd8d4e8 3664
ab78acc6
IC
3665Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3666 return writeFloat(this, value, offset, true, noAssert)
3667}
ebd8d4e8 3668
ab78acc6
IC
3669Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3670 return writeFloat(this, value, offset, false, noAssert)
3671}
ebd8d4e8 3672
ab78acc6
IC
3673function writeDouble (buf, value, offset, littleEndian, noAssert) {
3674 if (!noAssert) {
3675 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3676 }
ab78acc6
IC
3677 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3678 return offset + 8
ebd8d4e8
IC
3679}
3680
ab78acc6
IC
3681Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3682 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3683}
3684
ab78acc6
IC
3685Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3686 return writeDouble(this, value, offset, false, noAssert)
3687}
ebd8d4e8 3688
ab78acc6
IC
3689// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3690Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3691 if (!start) start = 0
3692 if (!end && end !== 0) end = this.length
3693 if (targetStart >= target.length) targetStart = target.length
3694 if (!targetStart) targetStart = 0
3695 if (end > 0 && end < start) end = start
3696
3697 // Copy 0 bytes; we're done
3698 if (end === start) return 0
3699 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3700
ab78acc6
IC
3701 // Fatal error conditions
3702 if (targetStart < 0) {
3703 throw new RangeError('targetStart out of bounds')
3704 }
3705 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3706 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3707
ab78acc6
IC
3708 // Are we oob?
3709 if (end > this.length) end = this.length
3710 if (target.length - targetStart < end - start) {
3711 end = target.length - targetStart + start
3712 }
ebd8d4e8 3713
ab78acc6
IC
3714 var len = end - start
3715 var i
ebd8d4e8 3716
ab78acc6
IC
3717 if (this === target && start < targetStart && targetStart < end) {
3718 // descending copy from end
3719 for (i = len - 1; i >= 0; i--) {
3720 target[i + targetStart] = this[i + start]
3721 }
3722 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3723 // ascending copy from start
3724 for (i = 0; i < len; i++) {
3725 target[i + targetStart] = this[i + start]
3726 }
3727 } else {
3728 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3729 }
ebd8d4e8 3730
ab78acc6
IC
3731 return len
3732}
ebd8d4e8 3733
ab78acc6
IC
3734// fill(value, start=0, end=buffer.length)
3735Buffer.prototype.fill = function fill (value, start, end) {
3736 if (!value) value = 0
3737 if (!start) start = 0
3738 if (!end) end = this.length
ebd8d4e8 3739
ab78acc6 3740 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3741
ab78acc6
IC
3742 // Fill 0 bytes; we're done
3743 if (end === start) return
3744 if (this.length === 0) return
ebd8d4e8 3745
ab78acc6
IC
3746 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3747 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3748
ab78acc6
IC
3749 var i
3750 if (typeof value === 'number') {
3751 for (i = start; i < end; i++) {
3752 this[i] = value
ebd8d4e8 3753 }
ab78acc6
IC
3754 } else {
3755 var bytes = utf8ToBytes(value.toString())
3756 var len = bytes.length
3757 for (i = start; i < end; i++) {
3758 this[i] = bytes[i % len]
ebd8d4e8
IC
3759 }
3760 }
ebd8d4e8 3761
ab78acc6 3762 return this
ebd8d4e8
IC
3763}
3764
ab78acc6
IC
3765/**
3766 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3767 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3768 */
3769Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3770 if (typeof Uint8Array !== 'undefined') {
3771 if (Buffer.TYPED_ARRAY_SUPPORT) {
3772 return (new Buffer(this)).buffer
3773 } else {
3774 var buf = new Uint8Array(this.length)
3775 for (var i = 0, len = buf.length; i < len; i += 1) {
3776 buf[i] = this[i]
ebd8d4e8 3777 }
ab78acc6 3778 return buf.buffer
ebd8d4e8 3779 }
ab78acc6
IC
3780 } else {
3781 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 3782 }
ebd8d4e8
IC
3783}
3784
ab78acc6
IC
3785// HELPER FUNCTIONS
3786// ================
ebd8d4e8 3787
ab78acc6 3788var BP = Buffer.prototype
ebd8d4e8 3789
ab78acc6
IC
3790/**
3791 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3792 */
3793Buffer._augment = function _augment (arr) {
3794 arr.constructor = Buffer
3795 arr._isBuffer = true
ebd8d4e8 3796
ab78acc6
IC
3797 // save reference to original Uint8Array set method before overwriting
3798 arr._set = arr.set
ebd8d4e8 3799
ab78acc6
IC
3800 // deprecated
3801 arr.get = BP.get
3802 arr.set = BP.set
ebd8d4e8 3803
ab78acc6
IC
3804 arr.write = BP.write
3805 arr.toString = BP.toString
3806 arr.toLocaleString = BP.toString
3807 arr.toJSON = BP.toJSON
3808 arr.equals = BP.equals
3809 arr.compare = BP.compare
3810 arr.indexOf = BP.indexOf
3811 arr.copy = BP.copy
3812 arr.slice = BP.slice
3813 arr.readUIntLE = BP.readUIntLE
3814 arr.readUIntBE = BP.readUIntBE
3815 arr.readUInt8 = BP.readUInt8
3816 arr.readUInt16LE = BP.readUInt16LE
3817 arr.readUInt16BE = BP.readUInt16BE
3818 arr.readUInt32LE = BP.readUInt32LE
3819 arr.readUInt32BE = BP.readUInt32BE
3820 arr.readIntLE = BP.readIntLE
3821 arr.readIntBE = BP.readIntBE
3822 arr.readInt8 = BP.readInt8
3823 arr.readInt16LE = BP.readInt16LE
3824 arr.readInt16BE = BP.readInt16BE
3825 arr.readInt32LE = BP.readInt32LE
3826 arr.readInt32BE = BP.readInt32BE
3827 arr.readFloatLE = BP.readFloatLE
3828 arr.readFloatBE = BP.readFloatBE
3829 arr.readDoubleLE = BP.readDoubleLE
3830 arr.readDoubleBE = BP.readDoubleBE
3831 arr.writeUInt8 = BP.writeUInt8
3832 arr.writeUIntLE = BP.writeUIntLE
3833 arr.writeUIntBE = BP.writeUIntBE
3834 arr.writeUInt16LE = BP.writeUInt16LE
3835 arr.writeUInt16BE = BP.writeUInt16BE
3836 arr.writeUInt32LE = BP.writeUInt32LE
3837 arr.writeUInt32BE = BP.writeUInt32BE
3838 arr.writeIntLE = BP.writeIntLE
3839 arr.writeIntBE = BP.writeIntBE
3840 arr.writeInt8 = BP.writeInt8
3841 arr.writeInt16LE = BP.writeInt16LE
3842 arr.writeInt16BE = BP.writeInt16BE
3843 arr.writeInt32LE = BP.writeInt32LE
3844 arr.writeInt32BE = BP.writeInt32BE
3845 arr.writeFloatLE = BP.writeFloatLE
3846 arr.writeFloatBE = BP.writeFloatBE
3847 arr.writeDoubleLE = BP.writeDoubleLE
3848 arr.writeDoubleBE = BP.writeDoubleBE
3849 arr.fill = BP.fill
3850 arr.inspect = BP.inspect
3851 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 3852
ab78acc6 3853 return arr
ebd8d4e8
IC
3854}
3855
ab78acc6 3856var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 3857
ab78acc6
IC
3858function base64clean (str) {
3859 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3860 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3861 // Node converts strings with length < 2 to ''
3862 if (str.length < 2) return ''
3863 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3864 while (str.length % 4 !== 0) {
3865 str = str + '='
3866 }
3867 return str
ebd8d4e8
IC
3868}
3869
ab78acc6
IC
3870function stringtrim (str) {
3871 if (str.trim) return str.trim()
3872 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
3873}
3874
ab78acc6
IC
3875function toHex (n) {
3876 if (n < 16) return '0' + n.toString(16)
3877 return n.toString(16)
ebd8d4e8
IC
3878}
3879
ab78acc6
IC
3880function utf8ToBytes (string, units) {
3881 units = units || Infinity
3882 var codePoint
3883 var length = string.length
3884 var leadSurrogate = null
3885 var bytes = []
ebd8d4e8 3886
ab78acc6
IC
3887 for (var i = 0; i < length; i++) {
3888 codePoint = string.charCodeAt(i)
ebd8d4e8 3889
ab78acc6
IC
3890 // is surrogate component
3891 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3892 // last char was a lead
3893 if (!leadSurrogate) {
3894 // no lead yet
3895 if (codePoint > 0xDBFF) {
3896 // unexpected trail
3897 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3898 continue
ebd8d4e8 3899
ab78acc6
IC
3900 } else if (i + 1 === length) {
3901 // unpaired lead
3902 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3903 continue
3904 }
ebd8d4e8 3905
ab78acc6
IC
3906 // valid lead
3907 leadSurrogate = codePoint
ebd8d4e8 3908
ab78acc6
IC
3909 continue
3910 }
ebd8d4e8 3911
ab78acc6
IC
3912 // 2 leads in a row
3913 if (codePoint < 0xDC00) {
3914 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3915 leadSurrogate = codePoint
3916 continue
3917 }
ebd8d4e8 3918
ab78acc6
IC
3919 // valid surrogate pair
3920 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3921
3922 } else if (leadSurrogate) {
3923 // valid bmp char, but last char was a lead
3924 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3925 }
3926
3927 leadSurrogate = null
3928
3929 // encode utf8
3930 if (codePoint < 0x80) {
3931 if ((units -= 1) < 0) break
3932 bytes.push(codePoint)
3933 } else if (codePoint < 0x800) {
3934 if ((units -= 2) < 0) break
3935 bytes.push(
3936 codePoint >> 0x6 | 0xC0,
3937 codePoint & 0x3F | 0x80
3938 )
3939 } else if (codePoint < 0x10000) {
3940 if ((units -= 3) < 0) break
3941 bytes.push(
3942 codePoint >> 0xC | 0xE0,
3943 codePoint >> 0x6 & 0x3F | 0x80,
3944 codePoint & 0x3F | 0x80
3945 )
3946 } else if (codePoint < 0x110000) {
3947 if ((units -= 4) < 0) break
3948 bytes.push(
3949 codePoint >> 0x12 | 0xF0,
3950 codePoint >> 0xC & 0x3F | 0x80,
3951 codePoint >> 0x6 & 0x3F | 0x80,
3952 codePoint & 0x3F | 0x80
3953 )
3954 } else {
3955 throw new Error('Invalid code point')
ebd8d4e8 3956 }
ebd8d4e8 3957 }
ab78acc6
IC
3958
3959 return bytes
3960}
3961
3962function asciiToBytes (str) {
3963 var byteArray = []
3964 for (var i = 0; i < str.length; i++) {
3965 // Node's code seems to be doing this and not & 0x7F..
3966 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 3967 }
ab78acc6 3968 return byteArray
ebd8d4e8
IC
3969}
3970
ab78acc6
IC
3971function utf16leToBytes (str, units) {
3972 var c, hi, lo
3973 var byteArray = []
3974 for (var i = 0; i < str.length; i++) {
3975 if ((units -= 2) < 0) break
ebd8d4e8 3976
ab78acc6
IC
3977 c = str.charCodeAt(i)
3978 hi = c >> 8
3979 lo = c % 256
3980 byteArray.push(lo)
3981 byteArray.push(hi)
3982 }
ebd8d4e8 3983
ab78acc6
IC
3984 return byteArray
3985}
ebd8d4e8 3986
ab78acc6
IC
3987function base64ToBytes (str) {
3988 return base64.toByteArray(base64clean(str))
3989}
ebd8d4e8 3990
ab78acc6
IC
3991function blitBuffer (src, dst, offset, length) {
3992 for (var i = 0; i < length; i++) {
3993 if ((i + offset >= dst.length) || (i >= src.length)) break
3994 dst[i + offset] = src[i]
3995 }
3996 return i
3997}
3998
3999},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4000var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4001
4002;(function (exports) {
4003 'use strict';
4004
4005 var Arr = (typeof Uint8Array !== 'undefined')
4006 ? Uint8Array
4007 : Array
ebd8d4e8 4008
ab78acc6
IC
4009 var PLUS = '+'.charCodeAt(0)
4010 var SLASH = '/'.charCodeAt(0)
4011 var NUMBER = '0'.charCodeAt(0)
4012 var LOWER = 'a'.charCodeAt(0)
4013 var UPPER = 'A'.charCodeAt(0)
4014 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4015 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4016
ab78acc6
IC
4017 function decode (elt) {
4018 var code = elt.charCodeAt(0)
4019 if (code === PLUS ||
4020 code === PLUS_URL_SAFE)
4021 return 62 // '+'
4022 if (code === SLASH ||
4023 code === SLASH_URL_SAFE)
4024 return 63 // '/'
4025 if (code < NUMBER)
4026 return -1 //no match
4027 if (code < NUMBER + 10)
4028 return code - NUMBER + 26 + 26
4029 if (code < UPPER + 26)
4030 return code - UPPER
4031 if (code < LOWER + 26)
4032 return code - LOWER + 26
4033 }
ebd8d4e8 4034
ab78acc6
IC
4035 function b64ToByteArray (b64) {
4036 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4037
ab78acc6
IC
4038 if (b64.length % 4 > 0) {
4039 throw new Error('Invalid string. Length must be a multiple of 4')
4040 }
ebd8d4e8 4041
ab78acc6
IC
4042 // the number of equal signs (place holders)
4043 // if there are two placeholders, than the two characters before it
4044 // represent one byte
4045 // if there is only one, then the three characters before it represent 2 bytes
4046 // this is just a cheap hack to not do indexOf twice
4047 var len = b64.length
4048 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4049
ab78acc6
IC
4050 // base64 is 4/3 + up to two characters of the original data
4051 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4052
ab78acc6
IC
4053 // if there are placeholders, only get up to the last complete 4 chars
4054 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4055
ab78acc6 4056 var L = 0
ebd8d4e8 4057
ab78acc6
IC
4058 function push (v) {
4059 arr[L++] = v
4060 }
ebd8d4e8 4061
ab78acc6
IC
4062 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4063 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4064 push((tmp & 0xFF0000) >> 16)
4065 push((tmp & 0xFF00) >> 8)
4066 push(tmp & 0xFF)
4067 }
ebd8d4e8 4068
ab78acc6
IC
4069 if (placeHolders === 2) {
4070 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4071 push(tmp & 0xFF)
4072 } else if (placeHolders === 1) {
4073 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4074 push((tmp >> 8) & 0xFF)
4075 push(tmp & 0xFF)
4076 }
ebd8d4e8 4077
ab78acc6
IC
4078 return arr
4079 }
ebd8d4e8 4080
ab78acc6
IC
4081 function uint8ToBase64 (uint8) {
4082 var i,
4083 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4084 output = "",
4085 temp, length
ebd8d4e8 4086
ab78acc6
IC
4087 function encode (num) {
4088 return lookup.charAt(num)
4089 }
ebd8d4e8 4090
ab78acc6
IC
4091 function tripletToBase64 (num) {
4092 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4093 }
ebd8d4e8 4094
ab78acc6
IC
4095 // go through the array every three bytes, we'll deal with trailing stuff later
4096 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4097 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4098 output += tripletToBase64(temp)
4099 }
ebd8d4e8 4100
ab78acc6
IC
4101 // pad the end with zeros, but make sure to not forget the extra bytes
4102 switch (extraBytes) {
4103 case 1:
4104 temp = uint8[uint8.length - 1]
4105 output += encode(temp >> 2)
4106 output += encode((temp << 4) & 0x3F)
4107 output += '=='
4108 break
4109 case 2:
4110 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4111 output += encode(temp >> 10)
4112 output += encode((temp >> 4) & 0x3F)
4113 output += encode((temp << 2) & 0x3F)
4114 output += '='
4115 break
4116 }
ebd8d4e8 4117
ab78acc6
IC
4118 return output
4119 }
ebd8d4e8 4120
ab78acc6
IC
4121 exports.toByteArray = b64ToByteArray
4122 exports.fromByteArray = uint8ToBase64
4123}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4124
ab78acc6
IC
4125},{}],9:[function(require,module,exports){
4126exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4127 var e, m
4128 var eLen = nBytes * 8 - mLen - 1
4129 var eMax = (1 << eLen) - 1
4130 var eBias = eMax >> 1
4131 var nBits = -7
4132 var i = isLE ? (nBytes - 1) : 0
4133 var d = isLE ? -1 : 1
4134 var s = buffer[offset + i]
4135
4136 i += d
4137
4138 e = s & ((1 << (-nBits)) - 1)
4139 s >>= (-nBits)
4140 nBits += eLen
4141 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4142
4143 m = e & ((1 << (-nBits)) - 1)
4144 e >>= (-nBits)
4145 nBits += mLen
4146 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4147
ab78acc6
IC
4148 if (e === 0) {
4149 e = 1 - eBias
4150 } else if (e === eMax) {
4151 return m ? NaN : ((s ? -1 : 1) * Infinity)
4152 } else {
4153 m = m + Math.pow(2, mLen)
4154 e = e - eBias
ebd8d4e8 4155 }
ab78acc6 4156 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4157}
4158
ab78acc6
IC
4159exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4160 var e, m, c
4161 var eLen = nBytes * 8 - mLen - 1
4162 var eMax = (1 << eLen) - 1
4163 var eBias = eMax >> 1
4164 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4165 var i = isLE ? 0 : (nBytes - 1)
4166 var d = isLE ? 1 : -1
4167 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4168
ab78acc6 4169 value = Math.abs(value)
ebd8d4e8 4170
ab78acc6
IC
4171 if (isNaN(value) || value === Infinity) {
4172 m = isNaN(value) ? 1 : 0
4173 e = eMax
4174 } else {
4175 e = Math.floor(Math.log(value) / Math.LN2)
4176 if (value * (c = Math.pow(2, -e)) < 1) {
4177 e--
4178 c *= 2
ebd8d4e8 4179 }
ab78acc6
IC
4180 if (e + eBias >= 1) {
4181 value += rt / c
4182 } else {
4183 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4184 }
ab78acc6
IC
4185 if (value * c >= 2) {
4186 e++
4187 c /= 2
ebd8d4e8 4188 }
ab78acc6
IC
4189
4190 if (e + eBias >= eMax) {
4191 m = 0
4192 e = eMax
4193 } else if (e + eBias >= 1) {
4194 m = (value * c - 1) * Math.pow(2, mLen)
4195 e = e + eBias
4196 } else {
4197 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4198 e = 0
ebd8d4e8
IC
4199 }
4200 }
ebd8d4e8 4201
ab78acc6 4202 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4203
ab78acc6
IC
4204 e = (e << mLen) | m
4205 eLen += mLen
4206 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4207
ab78acc6
IC
4208 buffer[offset + i - d] |= s * 128
4209}
ebd8d4e8 4210
ab78acc6 4211},{}],10:[function(require,module,exports){
ebd8d4e8 4212
ab78acc6
IC
4213/**
4214 * isArray
4215 */
ebd8d4e8 4216
ab78acc6 4217var isArray = Array.isArray;
ebd8d4e8
IC
4218
4219/**
ab78acc6 4220 * toString
ebd8d4e8 4221 */
ebd8d4e8 4222
ab78acc6 4223var str = Object.prototype.toString;
ebd8d4e8
IC
4224
4225/**
ab78acc6
IC
4226 * Whether or not the given `val`
4227 * is an array.
ebd8d4e8 4228 *
ab78acc6
IC
4229 * example:
4230 *
4231 * isArray([]);
4232 * // > true
4233 * isArray(arguments);
4234 * // > false
4235 * isArray('');
4236 * // > false
4237 *
4238 * @param {mixed} val
4239 * @return {bool}
ebd8d4e8 4240 */
ebd8d4e8 4241
ab78acc6
IC
4242module.exports = isArray || function (val) {
4243 return !! val && '[object Array]' == str.call(val);
4244};
4245
4246},{}],11:[function(require,module,exports){
4247// Copyright Joyent, Inc. and other Node contributors.
4248//
4249// Permission is hereby granted, free of charge, to any person obtaining a
4250// copy of this software and associated documentation files (the
4251// "Software"), to deal in the Software without restriction, including
4252// without limitation the rights to use, copy, modify, merge, publish,
4253// distribute, sublicense, and/or sell copies of the Software, and to permit
4254// persons to whom the Software is furnished to do so, subject to the
4255// following conditions:
4256//
4257// The above copyright notice and this permission notice shall be included
4258// in all copies or substantial portions of the Software.
4259//
4260// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4261// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4262// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4263// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4264// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4265// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4266// USE OR OTHER DEALINGS IN THE SOFTWARE.
4267
4268function EventEmitter() {
4269 this._events = this._events || {};
4270 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4271}
ab78acc6 4272module.exports = EventEmitter;
ebd8d4e8 4273
ab78acc6
IC
4274// Backwards-compat with node 0.10.x
4275EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4276
ab78acc6
IC
4277EventEmitter.prototype._events = undefined;
4278EventEmitter.prototype._maxListeners = undefined;
4279
4280// By default EventEmitters will print a warning if more than 10 listeners are
4281// added to it. This is a useful default which helps finding memory leaks.
4282EventEmitter.defaultMaxListeners = 10;
4283
4284// Obviously not all Emitters should be limited to 10. This function allows
4285// that to be increased. Set to zero for unlimited.
4286EventEmitter.prototype.setMaxListeners = function(n) {
4287 if (!isNumber(n) || n < 0 || isNaN(n))
4288 throw TypeError('n must be a positive number');
4289 this._maxListeners = n;
4290 return this;
4291};
4292
4293EventEmitter.prototype.emit = function(type) {
4294 var er, handler, len, args, i, listeners;
4295
4296 if (!this._events)
4297 this._events = {};
4298
4299 // If there is no 'error' event listener then throw.
4300 if (type === 'error') {
4301 if (!this._events.error ||
4302 (isObject(this._events.error) && !this._events.error.length)) {
4303 er = arguments[1];
4304 if (er instanceof Error) {
4305 throw er; // Unhandled 'error' event
4306 }
4307 throw TypeError('Uncaught, unspecified "error" event.');
4308 }
4309 }
4310
4311 handler = this._events[type];
4312
4313 if (isUndefined(handler))
4314 return false;
4315
4316 if (isFunction(handler)) {
4317 switch (arguments.length) {
4318 // fast cases
4319 case 1:
4320 handler.call(this);
4321 break;
4322 case 2:
4323 handler.call(this, arguments[1]);
4324 break;
4325 case 3:
4326 handler.call(this, arguments[1], arguments[2]);
4327 break;
4328 // slower
4329 default:
4330 len = arguments.length;
4331 args = new Array(len - 1);
4332 for (i = 1; i < len; i++)
4333 args[i - 1] = arguments[i];
4334 handler.apply(this, args);
4335 }
4336 } else if (isObject(handler)) {
4337 len = arguments.length;
4338 args = new Array(len - 1);
4339 for (i = 1; i < len; i++)
4340 args[i - 1] = arguments[i];
ebd8d4e8 4341
ab78acc6
IC
4342 listeners = handler.slice();
4343 len = listeners.length;
4344 for (i = 0; i < len; i++)
4345 listeners[i].apply(this, args);
ebd8d4e8
IC
4346 }
4347
ab78acc6
IC
4348 return true;
4349};
ebd8d4e8 4350
ab78acc6
IC
4351EventEmitter.prototype.addListener = function(type, listener) {
4352 var m;
ebd8d4e8 4353
ab78acc6
IC
4354 if (!isFunction(listener))
4355 throw TypeError('listener must be a function');
ebd8d4e8 4356
ab78acc6
IC
4357 if (!this._events)
4358 this._events = {};
ebd8d4e8 4359
ab78acc6
IC
4360 // To avoid recursion in the case that type === "newListener"! Before
4361 // adding it to the listeners, first emit "newListener".
4362 if (this._events.newListener)
4363 this.emit('newListener', type,
4364 isFunction(listener.listener) ?
4365 listener.listener : listener);
ebd8d4e8 4366
ab78acc6
IC
4367 if (!this._events[type])
4368 // Optimize the case of one listener. Don't need the extra array object.
4369 this._events[type] = listener;
4370 else if (isObject(this._events[type]))
4371 // If we've already got an array, just append.
4372 this._events[type].push(listener);
4373 else
4374 // Adding the second element, need to change to array.
4375 this._events[type] = [this._events[type], listener];
4376
4377 // Check for listener leak
4378 if (isObject(this._events[type]) && !this._events[type].warned) {
4379 var m;
4380 if (!isUndefined(this._maxListeners)) {
4381 m = this._maxListeners;
4382 } else {
4383 m = EventEmitter.defaultMaxListeners;
4384 }
4385
4386 if (m && m > 0 && this._events[type].length > m) {
4387 this._events[type].warned = true;
4388 console.error('(node) warning: possible EventEmitter memory ' +
4389 'leak detected. %d listeners added. ' +
4390 'Use emitter.setMaxListeners() to increase limit.',
4391 this._events[type].length);
4392 if (typeof console.trace === 'function') {
4393 // not supported in IE 10
4394 console.trace();
4395 }
4396 }
4397 }
ebd8d4e8 4398
ab78acc6
IC
4399 return this;
4400};
ebd8d4e8 4401
ab78acc6 4402EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4403
ab78acc6
IC
4404EventEmitter.prototype.once = function(type, listener) {
4405 if (!isFunction(listener))
4406 throw TypeError('listener must be a function');
ebd8d4e8 4407
ab78acc6 4408 var fired = false;
ebd8d4e8 4409
ab78acc6
IC
4410 function g() {
4411 this.removeListener(type, g);
ebd8d4e8 4412
ab78acc6
IC
4413 if (!fired) {
4414 fired = true;
4415 listener.apply(this, arguments);
4416 }
4417 }
ebd8d4e8 4418
ab78acc6
IC
4419 g.listener = listener;
4420 this.on(type, g);
ebd8d4e8 4421
ab78acc6
IC
4422 return this;
4423};
ebd8d4e8 4424
ab78acc6
IC
4425// emits a 'removeListener' event iff the listener was removed
4426EventEmitter.prototype.removeListener = function(type, listener) {
4427 var list, position, length, i;
ebd8d4e8 4428
ab78acc6
IC
4429 if (!isFunction(listener))
4430 throw TypeError('listener must be a function');
ebd8d4e8 4431
ab78acc6
IC
4432 if (!this._events || !this._events[type])
4433 return this;
ebd8d4e8 4434
ab78acc6
IC
4435 list = this._events[type];
4436 length = list.length;
4437 position = -1;
4438
4439 if (list === listener ||
4440 (isFunction(list.listener) && list.listener === listener)) {
4441 delete this._events[type];
4442 if (this._events.removeListener)
4443 this.emit('removeListener', type, listener);
4444
4445 } else if (isObject(list)) {
4446 for (i = length; i-- > 0;) {
4447 if (list[i] === listener ||
4448 (list[i].listener && list[i].listener === listener)) {
4449 position = i;
4450 break;
ebd8d4e8 4451 }
ab78acc6 4452 }
ebd8d4e8 4453
ab78acc6
IC
4454 if (position < 0)
4455 return this;
4456
4457 if (list.length === 1) {
4458 list.length = 0;
4459 delete this._events[type];
4460 } else {
4461 list.splice(position, 1);
ebd8d4e8 4462 }
ab78acc6
IC
4463
4464 if (this._events.removeListener)
4465 this.emit('removeListener', type, listener);
ebd8d4e8 4466 }
ab78acc6
IC
4467
4468 return this;
ebd8d4e8
IC
4469};
4470
ab78acc6
IC
4471EventEmitter.prototype.removeAllListeners = function(type) {
4472 var key, listeners;
ebd8d4e8 4473
ab78acc6
IC
4474 if (!this._events)
4475 return this;
4476
4477 // not listening for removeListener, no need to emit
4478 if (!this._events.removeListener) {
4479 if (arguments.length === 0)
4480 this._events = {};
4481 else if (this._events[type])
4482 delete this._events[type];
4483 return this;
ebd8d4e8 4484 }
ab78acc6
IC
4485
4486 // emit removeListener for all listeners on all events
4487 if (arguments.length === 0) {
4488 for (key in this._events) {
4489 if (key === 'removeListener') continue;
4490 this.removeAllListeners(key);
4491 }
4492 this.removeAllListeners('removeListener');
4493 this._events = {};
4494 return this;
ebd8d4e8 4495 }
ebd8d4e8 4496
ab78acc6
IC
4497 listeners = this._events[type];
4498
4499 if (isFunction(listeners)) {
4500 this.removeListener(type, listeners);
ebd8d4e8 4501 } else {
ab78acc6
IC
4502 // LIFO order
4503 while (listeners.length)
4504 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4505 }
ab78acc6 4506 delete this._events[type];
ebd8d4e8 4507
ab78acc6
IC
4508 return this;
4509};
ebd8d4e8 4510
ab78acc6
IC
4511EventEmitter.prototype.listeners = function(type) {
4512 var ret;
4513 if (!this._events || !this._events[type])
4514 ret = [];
4515 else if (isFunction(this._events[type]))
4516 ret = [this._events[type]];
4517 else
4518 ret = this._events[type].slice();
4519 return ret;
4520};
ebd8d4e8 4521
ab78acc6
IC
4522EventEmitter.listenerCount = function(emitter, type) {
4523 var ret;
4524 if (!emitter._events || !emitter._events[type])
4525 ret = 0;
4526 else if (isFunction(emitter._events[type]))
4527 ret = 1;
4528 else
4529 ret = emitter._events[type].length;
4530 return ret;
4531};
ebd8d4e8 4532
ab78acc6
IC
4533function isFunction(arg) {
4534 return typeof arg === 'function';
ebd8d4e8
IC
4535}
4536
ab78acc6
IC
4537function isNumber(arg) {
4538 return typeof arg === 'number';
4539}
ebd8d4e8 4540
ab78acc6
IC
4541function isObject(arg) {
4542 return typeof arg === 'object' && arg !== null;
4543}
ebd8d4e8 4544
ab78acc6
IC
4545function isUndefined(arg) {
4546 return arg === void 0;
ebd8d4e8 4547}
ebd8d4e8 4548
ab78acc6
IC
4549},{}],12:[function(require,module,exports){
4550if (typeof Object.create === 'function') {
4551 // implementation from standard node.js 'util' module
4552 module.exports = function inherits(ctor, superCtor) {
4553 ctor.super_ = superCtor
4554 ctor.prototype = Object.create(superCtor.prototype, {
4555 constructor: {
4556 value: ctor,
4557 enumerable: false,
4558 writable: true,
4559 configurable: true
4560 }
4561 });
4562 };
4563} else {
4564 // old school shim for old browsers
4565 module.exports = function inherits(ctor, superCtor) {
4566 ctor.super_ = superCtor
4567 var TempCtor = function () {}
4568 TempCtor.prototype = superCtor.prototype
4569 ctor.prototype = new TempCtor()
4570 ctor.prototype.constructor = ctor
4571 }
4572}
ebd8d4e8 4573
ab78acc6
IC
4574},{}],13:[function(require,module,exports){
4575module.exports = Array.isArray || function (arr) {
4576 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4577};
4578
ab78acc6
IC
4579},{}],14:[function(require,module,exports){
4580// shim for using process in browser
ebd8d4e8 4581
ab78acc6
IC
4582var process = module.exports = {};
4583var queue = [];
4584var draining = false;
4585var currentQueue;
4586var queueIndex = -1;
4587
4588function cleanUpNextTick() {
4589 draining = false;
4590 if (currentQueue.length) {
4591 queue = currentQueue.concat(queue);
4592 } else {
4593 queueIndex = -1;
4594 }
4595 if (queue.length) {
4596 drainQueue();
4597 }
4598}
ebd8d4e8 4599
ab78acc6
IC
4600function drainQueue() {
4601 if (draining) {
4602 return;
4603 }
4604 var timeout = setTimeout(cleanUpNextTick);
4605 draining = true;
ebd8d4e8 4606
ab78acc6
IC
4607 var len = queue.length;
4608 while(len) {
4609 currentQueue = queue;
4610 queue = [];
4611 while (++queueIndex < len) {
4612 currentQueue[queueIndex].run();
4613 }
4614 queueIndex = -1;
4615 len = queue.length;
4616 }
4617 currentQueue = null;
4618 draining = false;
4619 clearTimeout(timeout);
4620}
4621
4622process.nextTick = function (fun) {
4623 var args = new Array(arguments.length - 1);
4624 if (arguments.length > 1) {
4625 for (var i = 1; i < arguments.length; i++) {
4626 args[i - 1] = arguments[i];
4627 }
4628 }
4629 queue.push(new Item(fun, args));
4630 if (queue.length === 1 && !draining) {
4631 setTimeout(drainQueue, 0);
4632 }
ebd8d4e8
IC
4633};
4634
ab78acc6
IC
4635// v8 likes predictible objects
4636function Item(fun, array) {
4637 this.fun = fun;
4638 this.array = array;
4639}
4640Item.prototype.run = function () {
4641 this.fun.apply(null, this.array);
4642};
4643process.title = 'browser';
4644process.browser = true;
4645process.env = {};
4646process.argv = [];
4647process.version = ''; // empty string to avoid regexp issues
4648process.versions = {};
ebd8d4e8 4649
ab78acc6
IC
4650function noop() {}
4651
4652process.on = noop;
4653process.addListener = noop;
4654process.once = noop;
4655process.off = noop;
4656process.removeListener = noop;
4657process.removeAllListeners = noop;
4658process.emit = noop;
4659
4660process.binding = function (name) {
4661 throw new Error('process.binding is not supported');
4662};
ebd8d4e8 4663
ab78acc6
IC
4664// TODO(shtylman)
4665process.cwd = function () { return '/' };
4666process.chdir = function (dir) {
4667 throw new Error('process.chdir is not supported');
4668};
4669process.umask = function() { return 0; };
ebd8d4e8 4670
ab78acc6
IC
4671},{}],15:[function(require,module,exports){
4672module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4673
ab78acc6
IC
4674},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4675(function (process){
4676// Copyright Joyent, Inc. and other Node contributors.
4677//
4678// Permission is hereby granted, free of charge, to any person obtaining a
4679// copy of this software and associated documentation files (the
4680// "Software"), to deal in the Software without restriction, including
4681// without limitation the rights to use, copy, modify, merge, publish,
4682// distribute, sublicense, and/or sell copies of the Software, and to permit
4683// persons to whom the Software is furnished to do so, subject to the
4684// following conditions:
4685//
4686// The above copyright notice and this permission notice shall be included
4687// in all copies or substantial portions of the Software.
4688//
4689// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4690// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4691// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4692// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4693// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4694// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4695// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4696
ab78acc6
IC
4697// a duplex stream is just a stream that is both readable and writable.
4698// Since JS doesn't have multiple prototypal inheritance, this class
4699// prototypally inherits from Readable, and then parasitically from
4700// Writable.
ebd8d4e8 4701
ab78acc6 4702module.exports = Duplex;
ebd8d4e8 4703
ab78acc6
IC
4704/*<replacement>*/
4705var objectKeys = Object.keys || function (obj) {
4706 var keys = [];
4707 for (var key in obj) keys.push(key);
4708 return keys;
ebd8d4e8 4709}
ab78acc6 4710/*</replacement>*/
ebd8d4e8 4711
ebd8d4e8 4712
ab78acc6
IC
4713/*<replacement>*/
4714var util = require('core-util-is');
4715util.inherits = require('inherits');
4716/*</replacement>*/
ebd8d4e8 4717
ab78acc6
IC
4718var Readable = require('./_stream_readable');
4719var Writable = require('./_stream_writable');
ebd8d4e8 4720
ab78acc6 4721util.inherits(Duplex, Readable);
ebd8d4e8 4722
ab78acc6
IC
4723forEach(objectKeys(Writable.prototype), function(method) {
4724 if (!Duplex.prototype[method])
4725 Duplex.prototype[method] = Writable.prototype[method];
4726});
ebd8d4e8 4727
ab78acc6
IC
4728function Duplex(options) {
4729 if (!(this instanceof Duplex))
4730 return new Duplex(options);
ebd8d4e8 4731
ab78acc6
IC
4732 Readable.call(this, options);
4733 Writable.call(this, options);
ebd8d4e8 4734
ab78acc6
IC
4735 if (options && options.readable === false)
4736 this.readable = false;
ebd8d4e8 4737
ab78acc6
IC
4738 if (options && options.writable === false)
4739 this.writable = false;
ebd8d4e8 4740
ab78acc6
IC
4741 this.allowHalfOpen = true;
4742 if (options && options.allowHalfOpen === false)
4743 this.allowHalfOpen = false;
ebd8d4e8 4744
ab78acc6 4745 this.once('end', onend);
ebd8d4e8
IC
4746}
4747
ab78acc6
IC
4748// the no-half-open enforcer
4749function onend() {
4750 // if we allow half-open state, or if the writable side ended,
4751 // then we're ok.
4752 if (this.allowHalfOpen || this._writableState.ended)
4753 return;
ebd8d4e8 4754
ab78acc6
IC
4755 // no more data can be written.
4756 // But allow more writes to happen in this tick.
4757 process.nextTick(this.end.bind(this));
4758}
ebd8d4e8 4759
ab78acc6
IC
4760function forEach (xs, f) {
4761 for (var i = 0, l = xs.length; i < l; i++) {
4762 f(xs[i], i);
ebd8d4e8 4763 }
ab78acc6 4764}
ebd8d4e8 4765
ab78acc6
IC
4766}).call(this,require('_process'))
4767},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4768// Copyright Joyent, Inc. and other Node contributors.
4769//
4770// Permission is hereby granted, free of charge, to any person obtaining a
4771// copy of this software and associated documentation files (the
4772// "Software"), to deal in the Software without restriction, including
4773// without limitation the rights to use, copy, modify, merge, publish,
4774// distribute, sublicense, and/or sell copies of the Software, and to permit
4775// persons to whom the Software is furnished to do so, subject to the
4776// following conditions:
4777//
4778// The above copyright notice and this permission notice shall be included
4779// in all copies or substantial portions of the Software.
4780//
4781// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4782// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4783// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4784// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4785// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4786// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4787// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4788
ab78acc6
IC
4789// a passthrough stream.
4790// basically just the most minimal sort of Transform stream.
4791// Every written chunk gets output as-is.
ebd8d4e8 4792
ab78acc6 4793module.exports = PassThrough;
ebd8d4e8 4794
ab78acc6 4795var Transform = require('./_stream_transform');
ebd8d4e8 4796
ab78acc6
IC
4797/*<replacement>*/
4798var util = require('core-util-is');
4799util.inherits = require('inherits');
4800/*</replacement>*/
ebd8d4e8 4801
ab78acc6 4802util.inherits(PassThrough, Transform);
ebd8d4e8 4803
ab78acc6
IC
4804function PassThrough(options) {
4805 if (!(this instanceof PassThrough))
4806 return new PassThrough(options);
ebd8d4e8 4807
ab78acc6
IC
4808 Transform.call(this, options);
4809}
ebd8d4e8 4810
ab78acc6
IC
4811PassThrough.prototype._transform = function(chunk, encoding, cb) {
4812 cb(null, chunk);
ebd8d4e8
IC
4813};
4814
ab78acc6
IC
4815},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4816(function (process){
ebd8d4e8
IC
4817// Copyright Joyent, Inc. and other Node contributors.
4818//
4819// Permission is hereby granted, free of charge, to any person obtaining a
4820// copy of this software and associated documentation files (the
4821// "Software"), to deal in the Software without restriction, including
4822// without limitation the rights to use, copy, modify, merge, publish,
4823// distribute, sublicense, and/or sell copies of the Software, and to permit
4824// persons to whom the Software is furnished to do so, subject to the
4825// following conditions:
4826//
4827// The above copyright notice and this permission notice shall be included
4828// in all copies or substantial portions of the Software.
4829//
4830// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4831// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4832// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4833// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4834// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4835// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4836// USE OR OTHER DEALINGS IN THE SOFTWARE.
4837
ab78acc6 4838module.exports = Readable;
ebd8d4e8 4839
ab78acc6
IC
4840/*<replacement>*/
4841var isArray = require('isarray');
4842/*</replacement>*/
4843
4844
4845/*<replacement>*/
4846var Buffer = require('buffer').Buffer;
4847/*</replacement>*/
4848
4849Readable.ReadableState = ReadableState;
4850
4851var EE = require('events').EventEmitter;
4852
4853/*<replacement>*/
4854if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4855 return emitter.listeners(type).length;
ebd8d4e8 4856};
ab78acc6
IC
4857/*</replacement>*/
4858
4859var Stream = require('stream');
4860
4861/*<replacement>*/
4862var util = require('core-util-is');
4863util.inherits = require('inherits');
4864/*</replacement>*/
4865
4866var StringDecoder;
4867
4868
4869/*<replacement>*/
4870var debug = require('util');
4871if (debug && debug.debuglog) {
4872 debug = debug.debuglog('stream');
4873} else {
4874 debug = function () {};
4875}
4876/*</replacement>*/
4877
4878
4879util.inherits(Readable, Stream);
4880
4881function ReadableState(options, stream) {
4882 var Duplex = require('./_stream_duplex');
4883
4884 options = options || {};
4885
4886 // the point at which it stops calling _read() to fill the buffer
4887 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4888 var hwm = options.highWaterMark;
4889 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4890 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4891
4892 // cast to ints.
4893 this.highWaterMark = ~~this.highWaterMark;
4894
4895 this.buffer = [];
4896 this.length = 0;
4897 this.pipes = null;
4898 this.pipesCount = 0;
4899 this.flowing = null;
4900 this.ended = false;
4901 this.endEmitted = false;
4902 this.reading = false;
ebd8d4e8 4903
ab78acc6
IC
4904 // a flag to be able to tell if the onwrite cb is called immediately,
4905 // or on a later tick. We set this to true at first, because any
4906 // actions that shouldn't happen until "later" should generally also
4907 // not happen before the first write call.
4908 this.sync = true;
ebd8d4e8 4909
ab78acc6
IC
4910 // whenever we return null, then we set a flag to say
4911 // that we're awaiting a 'readable' event emission.
4912 this.needReadable = false;
4913 this.emittedReadable = false;
4914 this.readableListening = false;
ebd8d4e8 4915
ab78acc6
IC
4916
4917 // object stream flag. Used to make read(n) ignore n and to
4918 // make all the buffer merging and length checks go away
4919 this.objectMode = !!options.objectMode;
4920
4921 if (stream instanceof Duplex)
4922 this.objectMode = this.objectMode || !!options.readableObjectMode;
4923
4924 // Crypto is kind of old and crusty. Historically, its default string
4925 // encoding is 'binary' so we have to make this configurable.
4926 // Everything else in the universe uses 'utf8', though.
4927 this.defaultEncoding = options.defaultEncoding || 'utf8';
4928
4929 // when piping, we only care about 'readable' events that happen
4930 // after read()ing all the bytes and not getting any pushback.
4931 this.ranOut = false;
4932
4933 // the number of writers that are awaiting a drain event in .pipe()s
4934 this.awaitDrain = 0;
4935
4936 // if true, a maybeReadMore has been scheduled
4937 this.readingMore = false;
4938
4939 this.decoder = null;
4940 this.encoding = null;
4941 if (options.encoding) {
4942 if (!StringDecoder)
4943 StringDecoder = require('string_decoder/').StringDecoder;
4944 this.decoder = new StringDecoder(options.encoding);
4945 this.encoding = options.encoding;
ebd8d4e8 4946 }
ab78acc6 4947}
ebd8d4e8 4948
ab78acc6
IC
4949function Readable(options) {
4950 var Duplex = require('./_stream_duplex');
4951
4952 if (!(this instanceof Readable))
4953 return new Readable(options);
4954
4955 this._readableState = new ReadableState(options, this);
4956
4957 // legacy
4958 this.readable = true;
4959
4960 Stream.call(this);
4961}
4962
4963// Manually shove something into the read() buffer.
4964// This returns true if the highWaterMark has not been hit yet,
4965// similar to how Writable.write() returns true if you should
4966// write() some more.
4967Readable.prototype.push = function(chunk, encoding) {
4968 var state = this._readableState;
4969
4970 if (util.isString(chunk) && !state.objectMode) {
4971 encoding = encoding || state.defaultEncoding;
4972 if (encoding !== state.encoding) {
4973 chunk = new Buffer(chunk, encoding);
4974 encoding = '';
ebd8d4e8 4975 }
ebd8d4e8
IC
4976 }
4977
ab78acc6 4978 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
4979};
4980
ab78acc6
IC
4981// Unshift should *always* be something directly out of read()
4982Readable.prototype.unshift = function(chunk) {
4983 var state = this._readableState;
4984 return readableAddChunk(this, state, chunk, '', true);
4985};
ebd8d4e8 4986
ab78acc6
IC
4987function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4988 var er = chunkInvalid(state, chunk);
4989 if (er) {
4990 stream.emit('error', er);
4991 } else if (util.isNullOrUndefined(chunk)) {
4992 state.reading = false;
4993 if (!state.ended)
4994 onEofChunk(stream, state);
4995 } else if (state.objectMode || chunk && chunk.length > 0) {
4996 if (state.ended && !addToFront) {
4997 var e = new Error('stream.push() after EOF');
4998 stream.emit('error', e);
4999 } else if (state.endEmitted && addToFront) {
5000 var e = new Error('stream.unshift() after end event');
5001 stream.emit('error', e);
ebd8d4e8 5002 } else {
ab78acc6
IC
5003 if (state.decoder && !addToFront && !encoding)
5004 chunk = state.decoder.write(chunk);
5005
5006 if (!addToFront)
5007 state.reading = false;
5008
5009 // if we want the data now, just emit it.
5010 if (state.flowing && state.length === 0 && !state.sync) {
5011 stream.emit('data', chunk);
5012 stream.read(0);
5013 } else {
5014 // update the buffer info.
5015 state.length += state.objectMode ? 1 : chunk.length;
5016 if (addToFront)
5017 state.buffer.unshift(chunk);
5018 else
5019 state.buffer.push(chunk);
5020
5021 if (state.needReadable)
5022 emitReadable(stream);
5023 }
5024
5025 maybeReadMore(stream, state);
ebd8d4e8 5026 }
ab78acc6
IC
5027 } else if (!addToFront) {
5028 state.reading = false;
ebd8d4e8 5029 }
ebd8d4e8 5030
ab78acc6
IC
5031 return needMoreData(state);
5032}
ebd8d4e8 5033
ab78acc6
IC
5034
5035
5036// if it's past the high water mark, we can push in some more.
5037// Also, if we have no data yet, we can stand some
5038// more bytes. This is to work around cases where hwm=0,
5039// such as the repl. Also, if the push() triggered a
5040// readable event, and the user called read(largeNumber) such that
5041// needReadable was set, then we ought to push more, so that another
5042// 'readable' event will be triggered.
5043function needMoreData(state) {
5044 return !state.ended &&
5045 (state.needReadable ||
5046 state.length < state.highWaterMark ||
5047 state.length === 0);
5048}
5049
5050// backwards compatibility.
5051Readable.prototype.setEncoding = function(enc) {
5052 if (!StringDecoder)
5053 StringDecoder = require('string_decoder/').StringDecoder;
5054 this._readableState.decoder = new StringDecoder(enc);
5055 this._readableState.encoding = enc;
5056 return this;
5057};
5058
5059// Don't raise the hwm > 128MB
5060var MAX_HWM = 0x800000;
5061function roundUpToNextPowerOf2(n) {
5062 if (n >= MAX_HWM) {
5063 n = MAX_HWM;
5064 } else {
5065 // Get the next highest power of 2
5066 n--;
5067 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5068 n++;
ebd8d4e8 5069 }
ab78acc6 5070 return n;
ebd8d4e8 5071}
ebd8d4e8 5072
ab78acc6
IC
5073function howMuchToRead(n, state) {
5074 if (state.length === 0 && state.ended)
5075 return 0;
ebd8d4e8 5076
ab78acc6
IC
5077 if (state.objectMode)
5078 return n === 0 ? 0 : 1;
ebd8d4e8 5079
ab78acc6
IC
5080 if (isNaN(n) || util.isNull(n)) {
5081 // only flow one buffer at a time
5082 if (state.flowing && state.buffer.length)
5083 return state.buffer[0].length;
5084 else
5085 return state.length;
5086 }
ebd8d4e8 5087
ab78acc6
IC
5088 if (n <= 0)
5089 return 0;
ebd8d4e8 5090
ab78acc6
IC
5091 // If we're asking for more than the target buffer level,
5092 // then raise the water mark. Bump up to the next highest
5093 // power of 2, to prevent increasing it excessively in tiny
5094 // amounts.
5095 if (n > state.highWaterMark)
5096 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5097
ab78acc6
IC
5098 // don't have that much. return null, unless we've ended.
5099 if (n > state.length) {
5100 if (!state.ended) {
5101 state.needReadable = true;
5102 return 0;
5103 } else
5104 return state.length;
ebd8d4e8 5105 }
ab78acc6
IC
5106
5107 return n;
ebd8d4e8
IC
5108}
5109
ab78acc6
IC
5110// you can override either this method, or the async _read(n) below.
5111Readable.prototype.read = function(n) {
5112 debug('read', n);
5113 var state = this._readableState;
5114 var nOrig = n;
ebd8d4e8 5115
ab78acc6
IC
5116 if (!util.isNumber(n) || n > 0)
5117 state.emittedReadable = false;
5118
5119 // if we're doing read(0) to trigger a readable event, but we
5120 // already have a bunch of data in the buffer, then just trigger
5121 // the 'readable' event and move on.
5122 if (n === 0 &&
5123 state.needReadable &&
5124 (state.length >= state.highWaterMark || state.ended)) {
5125 debug('read: emitReadable', state.length, state.ended);
5126 if (state.length === 0 && state.ended)
5127 endReadable(this);
5128 else
5129 emitReadable(this);
5130 return null;
5131 }
5132
5133 n = howMuchToRead(n, state);
5134
5135 // if we've ended, and we're now clear, then finish it up.
5136 if (n === 0 && state.ended) {
5137 if (state.length === 0)
5138 endReadable(this);
5139 return null;
5140 }
5141
5142 // All the actual chunk generation logic needs to be
5143 // *below* the call to _read. The reason is that in certain
5144 // synthetic stream cases, such as passthrough streams, _read
5145 // may be a completely synchronous operation which may change
5146 // the state of the read buffer, providing enough data when
5147 // before there was *not* enough.
5148 //
5149 // So, the steps are:
5150 // 1. Figure out what the state of things will be after we do
5151 // a read from the buffer.
5152 //
5153 // 2. If that resulting state will trigger a _read, then call _read.
5154 // Note that this may be asynchronous, or synchronous. Yes, it is
5155 // deeply ugly to write APIs this way, but that still doesn't mean
5156 // that the Readable class should behave improperly, as streams are
5157 // designed to be sync/async agnostic.
5158 // Take note if the _read call is sync or async (ie, if the read call
5159 // has returned yet), so that we know whether or not it's safe to emit
5160 // 'readable' etc.
5161 //
5162 // 3. Actually pull the requested chunks out of the buffer and return.
5163
5164 // if we need a readable event, then we need to do some reading.
5165 var doRead = state.needReadable;
5166 debug('need readable', doRead);
5167
5168 // if we currently have less than the highWaterMark, then also read some
5169 if (state.length === 0 || state.length - n < state.highWaterMark) {
5170 doRead = true;
5171 debug('length less than watermark', doRead);
5172 }
5173
5174 // however, if we've ended, then there's no point, and if we're already
5175 // reading, then it's unnecessary.
5176 if (state.ended || state.reading) {
5177 doRead = false;
5178 debug('reading or ended', doRead);
5179 }
5180
5181 if (doRead) {
5182 debug('do read');
5183 state.reading = true;
5184 state.sync = true;
5185 // if the length is currently zero, then we *need* a readable event.
5186 if (state.length === 0)
5187 state.needReadable = true;
5188 // call internal read method
5189 this._read(state.highWaterMark);
5190 state.sync = false;
5191 }
5192
5193 // If _read pushed data synchronously, then `reading` will be false,
5194 // and we need to re-evaluate how much data we can return to the user.
5195 if (doRead && !state.reading)
5196 n = howMuchToRead(nOrig, state);
5197
5198 var ret;
5199 if (n > 0)
5200 ret = fromList(n, state);
5201 else
5202 ret = null;
ebd8d4e8 5203
ab78acc6
IC
5204 if (util.isNull(ret)) {
5205 state.needReadable = true;
5206 n = 0;
5207 }
ebd8d4e8 5208
ab78acc6 5209 state.length -= n;
ebd8d4e8 5210
ab78acc6
IC
5211 // If we have nothing in the buffer, then we want to know
5212 // as soon as we *do* get something into the buffer.
5213 if (state.length === 0 && !state.ended)
5214 state.needReadable = true;
ebd8d4e8 5215
ab78acc6
IC
5216 // If we tried to read() past the EOF, then emit end on the next tick.
5217 if (nOrig !== n && state.ended && state.length === 0)
5218 endReadable(this);
5219
5220 if (!util.isNull(ret))
5221 this.emit('data', ret);
5222
5223 return ret;
5224};
5225
5226function chunkInvalid(state, chunk) {
5227 var er = null;
5228 if (!util.isBuffer(chunk) &&
5229 !util.isString(chunk) &&
5230 !util.isNullOrUndefined(chunk) &&
5231 !state.objectMode) {
5232 er = new TypeError('Invalid non-string/buffer chunk');
5233 }
5234 return er;
ebd8d4e8
IC
5235}
5236
5237
ab78acc6
IC
5238function onEofChunk(stream, state) {
5239 if (state.decoder && !state.ended) {
5240 var chunk = state.decoder.end();
5241 if (chunk && chunk.length) {
5242 state.buffer.push(chunk);
5243 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5244 }
ebd8d4e8 5245 }
ab78acc6 5246 state.ended = true;
ebd8d4e8 5247
ab78acc6
IC
5248 // emit 'readable' now to make sure it gets picked up.
5249 emitReadable(stream);
5250}
5251
5252// Don't emit readable right away in sync mode, because this can trigger
5253// another read() call => stack overflow. This way, it might trigger
5254// a nextTick recursion warning, but that's not so bad.
5255function emitReadable(stream) {
5256 var state = stream._readableState;
5257 state.needReadable = false;
5258 if (!state.emittedReadable) {
5259 debug('emitReadable', state.flowing);
5260 state.emittedReadable = true;
5261 if (state.sync)
5262 process.nextTick(function() {
5263 emitReadable_(stream);
5264 });
5265 else
5266 emitReadable_(stream);
ebd8d4e8 5267 }
ab78acc6 5268}
ebd8d4e8 5269
ab78acc6
IC
5270function emitReadable_(stream) {
5271 debug('emit readable');
5272 stream.emit('readable');
5273 flow(stream);
5274}
ebd8d4e8 5275
ab78acc6
IC
5276
5277// at this point, the user has presumably seen the 'readable' event,
5278// and called read() to consume some data. that may have triggered
5279// in turn another _read(n) call, in which case reading = true if
5280// it's in progress.
5281// However, if we're not ended, or reading, and the length < hwm,
5282// then go ahead and try to read some more preemptively.
5283function maybeReadMore(stream, state) {
5284 if (!state.readingMore) {
5285 state.readingMore = true;
5286 process.nextTick(function() {
5287 maybeReadMore_(stream, state);
5288 });
ebd8d4e8 5289 }
ab78acc6 5290}
ebd8d4e8 5291
ab78acc6
IC
5292function maybeReadMore_(stream, state) {
5293 var len = state.length;
5294 while (!state.reading && !state.flowing && !state.ended &&
5295 state.length < state.highWaterMark) {
5296 debug('maybeReadMore read 0');
5297 stream.read(0);
5298 if (len === state.length)
5299 // didn't get any data, stop spinning.
5300 break;
5301 else
5302 len = state.length;
ebd8d4e8 5303 }
ab78acc6
IC
5304 state.readingMore = false;
5305}
ebd8d4e8 5306
ab78acc6
IC
5307// abstract method. to be overridden in specific implementation classes.
5308// call cb(er, data) where data is <= n in length.
5309// for virtual (non-string, non-buffer) streams, "length" is somewhat
5310// arbitrary, and perhaps not very meaningful.
5311Readable.prototype._read = function(n) {
5312 this.emit('error', new Error('not implemented'));
5313};
5314
5315Readable.prototype.pipe = function(dest, pipeOpts) {
5316 var src = this;
5317 var state = this._readableState;
5318
5319 switch (state.pipesCount) {
5320 case 0:
5321 state.pipes = dest;
5322 break;
5323 case 1:
5324 state.pipes = [state.pipes, dest];
5325 break;
5326 default:
5327 state.pipes.push(dest);
5328 break;
ebd8d4e8 5329 }
ab78acc6
IC
5330 state.pipesCount += 1;
5331 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5332
ab78acc6
IC
5333 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5334 dest !== process.stdout &&
5335 dest !== process.stderr;
ebd8d4e8 5336
ab78acc6
IC
5337 var endFn = doEnd ? onend : cleanup;
5338 if (state.endEmitted)
5339 process.nextTick(endFn);
5340 else
5341 src.once('end', endFn);
5342
5343 dest.on('unpipe', onunpipe);
5344 function onunpipe(readable) {
5345 debug('onunpipe');
5346 if (readable === src) {
5347 cleanup();
5348 }
5349 }
5350
5351 function onend() {
5352 debug('onend');
5353 dest.end();
5354 }
5355
5356 // when the dest drains, it reduces the awaitDrain counter
5357 // on the source. This would be more elegant with a .once()
5358 // handler in flow(), but adding and removing repeatedly is
5359 // too slow.
5360 var ondrain = pipeOnDrain(src);
5361 dest.on('drain', ondrain);
5362
5363 function cleanup() {
5364 debug('cleanup');
5365 // cleanup event handlers once the pipe is broken
5366 dest.removeListener('close', onclose);
5367 dest.removeListener('finish', onfinish);
5368 dest.removeListener('drain', ondrain);
5369 dest.removeListener('error', onerror);
5370 dest.removeListener('unpipe', onunpipe);
5371 src.removeListener('end', onend);
5372 src.removeListener('end', cleanup);
5373 src.removeListener('data', ondata);
5374
5375 // if the reader is waiting for a drain event from this
5376 // specific writer, then it would cause it to never start
5377 // flowing again.
5378 // So, if this is awaiting a drain, then we just call it now.
5379 // If we don't know, then assume that we are waiting for one.
5380 if (state.awaitDrain &&
5381 (!dest._writableState || dest._writableState.needDrain))
5382 ondrain();
5383 }
5384
5385 src.on('data', ondata);
5386 function ondata(chunk) {
5387 debug('ondata');
5388 var ret = dest.write(chunk);
5389 if (false === ret) {
5390 debug('false write response, pause',
5391 src._readableState.awaitDrain);
5392 src._readableState.awaitDrain++;
5393 src.pause();
5394 }
5395 }
5396
5397 // if the dest has an error, then stop piping into it.
5398 // however, don't suppress the throwing behavior for this.
5399 function onerror(er) {
5400 debug('onerror', er);
5401 unpipe();
5402 dest.removeListener('error', onerror);
5403 if (EE.listenerCount(dest, 'error') === 0)
5404 dest.emit('error', er);
5405 }
5406 // This is a brutally ugly hack to make sure that our error handler
5407 // is attached before any userland ones. NEVER DO THIS.
5408 if (!dest._events || !dest._events.error)
5409 dest.on('error', onerror);
5410 else if (isArray(dest._events.error))
5411 dest._events.error.unshift(onerror);
5412 else
5413 dest._events.error = [onerror, dest._events.error];
5414
5415
5416
5417 // Both close and finish should trigger unpipe, but only once.
5418 function onclose() {
5419 dest.removeListener('finish', onfinish);
5420 unpipe();
ebd8d4e8 5421 }
ab78acc6
IC
5422 dest.once('close', onclose);
5423 function onfinish() {
5424 debug('onfinish');
5425 dest.removeListener('close', onclose);
5426 unpipe();
5427 }
5428 dest.once('finish', onfinish);
ebd8d4e8 5429
ab78acc6
IC
5430 function unpipe() {
5431 debug('unpipe');
5432 src.unpipe(dest);
ebd8d4e8
IC
5433 }
5434
ab78acc6
IC
5435 // tell the dest that it's being piped to
5436 dest.emit('pipe', src);
5437
5438 // start the flow if it hasn't been started already.
5439 if (!state.flowing) {
5440 debug('pipe resume');
5441 src.resume();
ebd8d4e8
IC
5442 }
5443
ab78acc6
IC
5444 return dest;
5445};
5446
5447function pipeOnDrain(src) {
5448 return function() {
5449 var state = src._readableState;
5450 debug('pipeOnDrain', state.awaitDrain);
5451 if (state.awaitDrain)
5452 state.awaitDrain--;
5453 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5454 state.flowing = true;
5455 flow(src);
5456 }
5457 };
5458}
5459
5460
5461Readable.prototype.unpipe = function(dest) {
5462 var state = this._readableState;
5463
5464 // if we're not piping anywhere, then do nothing.
5465 if (state.pipesCount === 0)
5466 return this;
5467
5468 // just one destination. most common case.
5469 if (state.pipesCount === 1) {
5470 // passed in one, but it's not the right one.
5471 if (dest && dest !== state.pipes)
5472 return this;
5473
5474 if (!dest)
5475 dest = state.pipes;
5476
5477 // got a match.
5478 state.pipes = null;
5479 state.pipesCount = 0;
5480 state.flowing = false;
5481 if (dest)
5482 dest.emit('unpipe', this);
5483 return this;
ebd8d4e8
IC
5484 }
5485
ab78acc6
IC
5486 // slow case. multiple pipe destinations.
5487
5488 if (!dest) {
5489 // remove all.
5490 var dests = state.pipes;
5491 var len = state.pipesCount;
5492 state.pipes = null;
5493 state.pipesCount = 0;
5494 state.flowing = false;
5495
5496 for (var i = 0; i < len; i++)
5497 dests[i].emit('unpipe', this);
5498 return this;
ebd8d4e8
IC
5499 }
5500
ab78acc6
IC
5501 // try to find the right one.
5502 var i = indexOf(state.pipes, dest);
5503 if (i === -1)
5504 return this;
5505
5506 state.pipes.splice(i, 1);
5507 state.pipesCount -= 1;
5508 if (state.pipesCount === 1)
5509 state.pipes = state.pipes[0];
5510
5511 dest.emit('unpipe', this);
ebd8d4e8 5512
ab78acc6
IC
5513 return this;
5514};
5515
5516// set up data events if they are asked for
5517// Ensure readable listeners eventually get something
5518Readable.prototype.on = function(ev, fn) {
5519 var res = Stream.prototype.on.call(this, ev, fn);
5520
5521 // If listening to data, and it has not explicitly been paused,
5522 // then call resume to start the flow of data on the next tick.
5523 if (ev === 'data' && false !== this._readableState.flowing) {
5524 this.resume();
5525 }
5526
5527 if (ev === 'readable' && this.readable) {
5528 var state = this._readableState;
5529 if (!state.readableListening) {
5530 state.readableListening = true;
5531 state.emittedReadable = false;
5532 state.needReadable = true;
5533 if (!state.reading) {
5534 var self = this;
5535 process.nextTick(function() {
5536 debug('readable nexttick read 0');
5537 self.read(0);
5538 });
5539 } else if (state.length) {
5540 emitReadable(this, state);
5541 }
ebd8d4e8
IC
5542 }
5543 }
5544
ab78acc6
IC
5545 return res;
5546};
5547Readable.prototype.addListener = Readable.prototype.on;
5548
5549// pause() and resume() are remnants of the legacy readable stream API
5550// If the user uses them, then switch into old mode.
5551Readable.prototype.resume = function() {
5552 var state = this._readableState;
5553 if (!state.flowing) {
5554 debug('resume');
5555 state.flowing = true;
5556 if (!state.reading) {
5557 debug('resume read 0');
5558 this.read(0);
5559 }
5560 resume(this, state);
5561 }
5562 return this;
5563};
ebd8d4e8 5564
ab78acc6
IC
5565function resume(stream, state) {
5566 if (!state.resumeScheduled) {
5567 state.resumeScheduled = true;
5568 process.nextTick(function() {
5569 resume_(stream, state);
ebd8d4e8
IC
5570 });
5571 }
ebd8d4e8
IC
5572}
5573
ab78acc6
IC
5574function resume_(stream, state) {
5575 state.resumeScheduled = false;
5576 stream.emit('resume');
5577 flow(stream);
5578 if (state.flowing && !state.reading)
5579 stream.read(0);
ebd8d4e8
IC
5580}
5581
ab78acc6
IC
5582Readable.prototype.pause = function() {
5583 debug('call pause flowing=%j', this._readableState.flowing);
5584 if (false !== this._readableState.flowing) {
5585 debug('pause');
5586 this._readableState.flowing = false;
5587 this.emit('pause');
5588 }
5589 return this;
5590};
ebd8d4e8 5591
ab78acc6
IC
5592function flow(stream) {
5593 var state = stream._readableState;
5594 debug('flow', state.flowing);
5595 if (state.flowing) {
5596 do {
5597 var chunk = stream.read();
5598 } while (null !== chunk && state.flowing);
5599 }
ebd8d4e8
IC
5600}
5601
ab78acc6
IC
5602// wrap an old-style stream as the async data source.
5603// This is *not* part of the readable stream interface.
5604// It is an ugly unfortunate mess of history.
5605Readable.prototype.wrap = function(stream) {
5606 var state = this._readableState;
5607 var paused = false;
ebd8d4e8 5608
ab78acc6
IC
5609 var self = this;
5610 stream.on('end', function() {
5611 debug('wrapped end');
5612 if (state.decoder && !state.ended) {
5613 var chunk = state.decoder.end();
5614 if (chunk && chunk.length)
5615 self.push(chunk);
ebd8d4e8 5616 }
ab78acc6
IC
5617
5618 self.push(null);
ebd8d4e8 5619 });
ebd8d4e8 5620
ab78acc6
IC
5621 stream.on('data', function(chunk) {
5622 debug('wrapped data');
5623 if (state.decoder)
5624 chunk = state.decoder.write(chunk);
5625 if (!chunk || !state.objectMode && !chunk.length)
5626 return;
ebd8d4e8 5627
ab78acc6
IC
5628 var ret = self.push(chunk);
5629 if (!ret) {
5630 paused = true;
5631 stream.pause();
ebd8d4e8 5632 }
ab78acc6
IC
5633 });
5634
5635 // proxy all the other methods.
5636 // important when wrapping filters and duplexes.
5637 for (var i in stream) {
5638 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5639 this[i] = function(method) { return function() {
5640 return stream[method].apply(stream, arguments);
5641 }}(i);
ebd8d4e8
IC
5642 }
5643 }
ab78acc6
IC
5644
5645 // proxy certain important events.
5646 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5647 forEach(events, function(ev) {
5648 stream.on(ev, self.emit.bind(self, ev));
5649 });
5650
5651 // when we try to consume some more bytes, simply unpause the
5652 // underlying stream.
5653 self._read = function(n) {
5654 debug('wrapped _read', n);
5655 if (paused) {
5656 paused = false;
5657 stream.resume();
ebd8d4e8 5658 }
ab78acc6
IC
5659 };
5660
5661 return self;
5662};
5663
5664
5665
5666// exposed for testing purposes only.
5667Readable._fromList = fromList;
5668
5669// Pluck off n bytes from an array of buffers.
5670// Length is the combined lengths of all the buffers in the list.
5671function fromList(n, state) {
5672 var list = state.buffer;
5673 var length = state.length;
5674 var stringMode = !!state.decoder;
5675 var objectMode = !!state.objectMode;
5676 var ret;
5677
5678 // nothing in the list, definitely empty.
5679 if (list.length === 0)
5680 return null;
5681
5682 if (length === 0)
5683 ret = null;
5684 else if (objectMode)
5685 ret = list.shift();
5686 else if (!n || n >= length) {
5687 // read it all, truncate the array.
5688 if (stringMode)
5689 ret = list.join('');
5690 else
5691 ret = Buffer.concat(list, length);
5692 list.length = 0;
5693 } else {
5694 // read just some of it.
5695 if (n < list[0].length) {
5696 // just take a part of the first list item.
5697 // slice is the same for buffers and strings.
5698 var buf = list[0];
5699 ret = buf.slice(0, n);
5700 list[0] = buf.slice(n);
5701 } else if (n === list[0].length) {
5702 // first list is a perfect match
5703 ret = list.shift();
ebd8d4e8 5704 } else {
ab78acc6
IC
5705 // complex case.
5706 // we have enough to cover it, but it spans past the first buffer.
5707 if (stringMode)
5708 ret = '';
5709 else
5710 ret = new Buffer(n);
ebd8d4e8 5711
ab78acc6
IC
5712 var c = 0;
5713 for (var i = 0, l = list.length; i < l && c < n; i++) {
5714 var buf = list[0];
5715 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5716
ab78acc6
IC
5717 if (stringMode)
5718 ret += buf.slice(0, cpy);
5719 else
5720 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5721
ab78acc6
IC
5722 if (cpy < buf.length)
5723 list[0] = buf.slice(cpy);
5724 else
5725 list.shift();
ebd8d4e8 5726
ab78acc6
IC
5727 c += cpy;
5728 }
5729 }
ebd8d4e8
IC
5730 }
5731
ab78acc6 5732 return ret;
ebd8d4e8
IC
5733}
5734
ab78acc6
IC
5735function endReadable(stream) {
5736 var state = stream._readableState;
ebd8d4e8 5737
ab78acc6
IC
5738 // If we get here before consuming all the bytes, then that is a
5739 // bug in node. Should never happen.
5740 if (state.length > 0)
5741 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5742
ab78acc6
IC
5743 if (!state.endEmitted) {
5744 state.ended = true;
5745 process.nextTick(function() {
5746 // Check that we didn't get one last unshift.
5747 if (!state.endEmitted && state.length === 0) {
5748 state.endEmitted = true;
5749 stream.readable = false;
5750 stream.emit('end');
5751 }
5752 });
5753 }
ebd8d4e8 5754}
ebd8d4e8 5755
ab78acc6
IC
5756function forEach (xs, f) {
5757 for (var i = 0, l = xs.length; i < l; i++) {
5758 f(xs[i], i);
5759 }
ebd8d4e8 5760}
ebd8d4e8 5761
ab78acc6
IC
5762function indexOf (xs, x) {
5763 for (var i = 0, l = xs.length; i < l; i++) {
5764 if (xs[i] === x) return i;
5765 }
5766 return -1;
ebd8d4e8 5767}
ebd8d4e8 5768
ab78acc6
IC
5769}).call(this,require('_process'))
5770},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
5771// Copyright Joyent, Inc. and other Node contributors.
5772//
5773// Permission is hereby granted, free of charge, to any person obtaining a
5774// copy of this software and associated documentation files (the
5775// "Software"), to deal in the Software without restriction, including
5776// without limitation the rights to use, copy, modify, merge, publish,
5777// distribute, sublicense, and/or sell copies of the Software, and to permit
5778// persons to whom the Software is furnished to do so, subject to the
5779// following conditions:
5780//
5781// The above copyright notice and this permission notice shall be included
5782// in all copies or substantial portions of the Software.
5783//
5784// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5785// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5786// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5787// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5788// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5789// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5790// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5791
ebd8d4e8 5792
ab78acc6
IC
5793// a transform stream is a readable/writable stream where you do
5794// something with the data. Sometimes it's called a "filter",
5795// but that's not a great name for it, since that implies a thing where
5796// some bits pass through, and others are simply ignored. (That would
5797// be a valid example of a transform, of course.)
5798//
5799// While the output is causally related to the input, it's not a
5800// necessarily symmetric or synchronous transformation. For example,
5801// a zlib stream might take multiple plain-text writes(), and then
5802// emit a single compressed chunk some time in the future.
5803//
5804// Here's how this works:
5805//
5806// The Transform stream has all the aspects of the readable and writable
5807// stream classes. When you write(chunk), that calls _write(chunk,cb)
5808// internally, and returns false if there's a lot of pending writes
5809// buffered up. When you call read(), that calls _read(n) until
5810// there's enough pending readable data buffered up.
5811//
5812// In a transform stream, the written data is placed in a buffer. When
5813// _read(n) is called, it transforms the queued up data, calling the
5814// buffered _write cb's as it consumes chunks. If consuming a single
5815// written chunk would result in multiple output chunks, then the first
5816// outputted bit calls the readcb, and subsequent chunks just go into
5817// the read buffer, and will cause it to emit 'readable' if necessary.
5818//
5819// This way, back-pressure is actually determined by the reading side,
5820// since _read has to be called to start processing a new chunk. However,
5821// a pathological inflate type of transform can cause excessive buffering
5822// here. For example, imagine a stream where every byte of input is
5823// interpreted as an integer from 0-255, and then results in that many
5824// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5825// 1kb of data being output. In this case, you could write a very small
5826// amount of input, and end up with a very large amount of output. In
5827// such a pathological inflating mechanism, there'd be no way to tell
5828// the system to stop doing the transform. A single 4MB write could
5829// cause the system to run out of memory.
5830//
5831// However, even in such a pathological case, only a single written chunk
5832// would be consumed, and then the rest would wait (un-transformed) until
5833// the results of the previous transformed chunk were consumed.
ebd8d4e8 5834
ab78acc6 5835module.exports = Transform;
ebd8d4e8 5836
ab78acc6 5837var Duplex = require('./_stream_duplex');
ebd8d4e8 5838
ab78acc6
IC
5839/*<replacement>*/
5840var util = require('core-util-is');
5841util.inherits = require('inherits');
5842/*</replacement>*/
5843
5844util.inherits(Transform, Duplex);
5845
5846
5847function TransformState(options, stream) {
5848 this.afterTransform = function(er, data) {
5849 return afterTransform(stream, er, data);
5850 };
5851
5852 this.needTransform = false;
5853 this.transforming = false;
5854 this.writecb = null;
5855 this.writechunk = null;
ebd8d4e8 5856}
ebd8d4e8 5857
ab78acc6
IC
5858function afterTransform(stream, er, data) {
5859 var ts = stream._transformState;
5860 ts.transforming = false;
5861
5862 var cb = ts.writecb;
5863
5864 if (!cb)
5865 return stream.emit('error', new Error('no writecb in Transform class'));
5866
5867 ts.writechunk = null;
5868 ts.writecb = null;
5869
5870 if (!util.isNullOrUndefined(data))
5871 stream.push(data);
5872
5873 if (cb)
5874 cb(er);
5875
5876 var rs = stream._readableState;
5877 rs.reading = false;
5878 if (rs.needReadable || rs.length < rs.highWaterMark) {
5879 stream._read(rs.highWaterMark);
5880 }
ebd8d4e8 5881}
ebd8d4e8 5882
ab78acc6
IC
5883
5884function Transform(options) {
5885 if (!(this instanceof Transform))
5886 return new Transform(options);
5887
5888 Duplex.call(this, options);
5889
5890 this._transformState = new TransformState(options, this);
5891
5892 // when the writable side finishes, then flush out anything remaining.
5893 var stream = this;
5894
5895 // start out asking for a readable event once data is transformed.
5896 this._readableState.needReadable = true;
5897
5898 // we have implemented the _read method, and done the other things
5899 // that Readable wants before the first _read call, so unset the
5900 // sync guard flag.
5901 this._readableState.sync = false;
5902
5903 this.once('prefinish', function() {
5904 if (util.isFunction(this._flush))
5905 this._flush(function(er) {
5906 done(stream, er);
5907 });
5908 else
5909 done(stream);
5910 });
ebd8d4e8 5911}
ebd8d4e8 5912
ab78acc6
IC
5913Transform.prototype.push = function(chunk, encoding) {
5914 this._transformState.needTransform = false;
5915 return Duplex.prototype.push.call(this, chunk, encoding);
5916};
5917
5918// This is the part where you do stuff!
5919// override this function in implementation classes.
5920// 'chunk' is an input chunk.
5921//
5922// Call `push(newChunk)` to pass along transformed output
5923// to the readable side. You may call 'push' zero or more times.
5924//
5925// Call `cb(err)` when you are done with this chunk. If you pass
5926// an error, then that'll put the hurt on the whole operation. If you
5927// never call cb(), then you'll never get another chunk.
5928Transform.prototype._transform = function(chunk, encoding, cb) {
5929 throw new Error('not implemented');
5930};
5931
5932Transform.prototype._write = function(chunk, encoding, cb) {
5933 var ts = this._transformState;
5934 ts.writecb = cb;
5935 ts.writechunk = chunk;
5936 ts.writeencoding = encoding;
5937 if (!ts.transforming) {
5938 var rs = this._readableState;
5939 if (ts.needTransform ||
5940 rs.needReadable ||
5941 rs.length < rs.highWaterMark)
5942 this._read(rs.highWaterMark);
5943 }
5944};
5945
5946// Doesn't matter what the args are here.
5947// _transform does all the work.
5948// That we got here means that the readable side wants more data.
5949Transform.prototype._read = function(n) {
5950 var ts = this._transformState;
ebd8d4e8 5951
ab78acc6
IC
5952 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5953 ts.transforming = true;
5954 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5955 } else {
5956 // mark that we need a transform, so that any data that comes in
5957 // will get processed, now that we've asked for it.
5958 ts.needTransform = true;
5959 }
5960};
ebd8d4e8 5961
ebd8d4e8 5962
ab78acc6
IC
5963function done(stream, er) {
5964 if (er)
5965 return stream.emit('error', er);
ebd8d4e8 5966
ab78acc6
IC
5967 // if there's nothing in the write buffer, then that means
5968 // that nothing more will ever be provided
5969 var ws = stream._writableState;
5970 var ts = stream._transformState;
ebd8d4e8 5971
ab78acc6
IC
5972 if (ws.length)
5973 throw new Error('calling transform done when ws.length != 0');
5974
5975 if (ts.transforming)
5976 throw new Error('calling transform done when still transforming');
5977
5978 return stream.push(null);
ebd8d4e8
IC
5979}
5980
ab78acc6
IC
5981},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5982(function (process){
5983// Copyright Joyent, Inc. and other Node contributors.
5984//
5985// Permission is hereby granted, free of charge, to any person obtaining a
5986// copy of this software and associated documentation files (the
5987// "Software"), to deal in the Software without restriction, including
5988// without limitation the rights to use, copy, modify, merge, publish,
5989// distribute, sublicense, and/or sell copies of the Software, and to permit
5990// persons to whom the Software is furnished to do so, subject to the
5991// following conditions:
5992//
5993// The above copyright notice and this permission notice shall be included
5994// in all copies or substantial portions of the Software.
5995//
5996// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5997// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5998// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5999// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6000// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6001// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6002// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6003
ab78acc6
IC
6004// A bit simpler than readable streams.
6005// Implement an async ._write(chunk, cb), and it'll handle all
6006// the drain event emission and buffering.
ebd8d4e8 6007
ab78acc6 6008module.exports = Writable;
ebd8d4e8 6009
ab78acc6
IC
6010/*<replacement>*/
6011var Buffer = require('buffer').Buffer;
6012/*</replacement>*/
ebd8d4e8 6013
ab78acc6 6014Writable.WritableState = WritableState;
ebd8d4e8
IC
6015
6016
ab78acc6
IC
6017/*<replacement>*/
6018var util = require('core-util-is');
6019util.inherits = require('inherits');
6020/*</replacement>*/
ebd8d4e8 6021
ab78acc6 6022var Stream = require('stream');
ebd8d4e8 6023
ab78acc6 6024util.inherits(Writable, Stream);
ebd8d4e8 6025
ab78acc6
IC
6026function WriteReq(chunk, encoding, cb) {
6027 this.chunk = chunk;
6028 this.encoding = encoding;
6029 this.callback = cb;
ebd8d4e8
IC
6030}
6031
ab78acc6
IC
6032function WritableState(options, stream) {
6033 var Duplex = require('./_stream_duplex');
ebd8d4e8 6034
ab78acc6 6035 options = options || {};
ebd8d4e8 6036
ab78acc6
IC
6037 // the point at which write() starts returning false
6038 // Note: 0 is a valid value, means that we always return false if
6039 // the entire buffer is not flushed immediately on write()
6040 var hwm = options.highWaterMark;
6041 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6042 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6043
ab78acc6
IC
6044 // object stream flag to indicate whether or not this stream
6045 // contains buffers or objects.
6046 this.objectMode = !!options.objectMode;
ebd8d4e8 6047
ab78acc6
IC
6048 if (stream instanceof Duplex)
6049 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6050
ab78acc6
IC
6051 // cast to ints.
6052 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6053
ab78acc6
IC
6054 this.needDrain = false;
6055 // at the start of calling end()
6056 this.ending = false;
6057 // when end() has been called, and returned
6058 this.ended = false;
6059 // when 'finish' is emitted
6060 this.finished = false;
ebd8d4e8 6061
ab78acc6
IC
6062 // should we decode strings into buffers before passing to _write?
6063 // this is here so that some node-core streams can optimize string
6064 // handling at a lower level.
6065 var noDecode = options.decodeStrings === false;
6066 this.decodeStrings = !noDecode;
ebd8d4e8 6067
ab78acc6
IC
6068 // Crypto is kind of old and crusty. Historically, its default string
6069 // encoding is 'binary' so we have to make this configurable.
6070 // Everything else in the universe uses 'utf8', though.
6071 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6072
ab78acc6
IC
6073 // not an actual buffer we keep track of, but a measurement
6074 // of how much we're waiting to get pushed to some underlying
6075 // socket or file.
6076 this.length = 0;
ebd8d4e8 6077
ab78acc6
IC
6078 // a flag to see when we're in the middle of a write.
6079 this.writing = false;
ebd8d4e8 6080
ab78acc6
IC
6081 // when true all writes will be buffered until .uncork() call
6082 this.corked = 0;
ebd8d4e8 6083
ab78acc6
IC
6084 // a flag to be able to tell if the onwrite cb is called immediately,
6085 // or on a later tick. We set this to true at first, because any
6086 // actions that shouldn't happen until "later" should generally also
6087 // not happen before the first write call.
6088 this.sync = true;
ebd8d4e8 6089
ab78acc6
IC
6090 // a flag to know if we're processing previously buffered items, which
6091 // may call the _write() callback in the same tick, so that we don't
6092 // end up in an overlapped onwrite situation.
6093 this.bufferProcessing = false;
ebd8d4e8 6094
ab78acc6
IC
6095 // the callback that's passed to _write(chunk,cb)
6096 this.onwrite = function(er) {
6097 onwrite(stream, er);
6098 };
ebd8d4e8 6099
ab78acc6
IC
6100 // the callback that the user supplies to write(chunk,encoding,cb)
6101 this.writecb = null;
ebd8d4e8 6102
ab78acc6
IC
6103 // the amount that is being written when _write is called.
6104 this.writelen = 0;
ebd8d4e8 6105
ab78acc6 6106 this.buffer = [];
ebd8d4e8 6107
ab78acc6
IC
6108 // number of pending user-supplied write callbacks
6109 // this must be 0 before 'finish' can be emitted
6110 this.pendingcb = 0;
ebd8d4e8 6111
ab78acc6
IC
6112 // emit prefinish if the only thing we're waiting for is _write cbs
6113 // This is relevant for synchronous Transform streams
6114 this.prefinished = false;
ebd8d4e8 6115
ab78acc6
IC
6116 // True if the error was already emitted and should not be thrown again
6117 this.errorEmitted = false;
ebd8d4e8
IC
6118}
6119
ab78acc6
IC
6120function Writable(options) {
6121 var Duplex = require('./_stream_duplex');
ebd8d4e8 6122
ab78acc6
IC
6123 // Writable ctor is applied to Duplexes, though they're not
6124 // instanceof Writable, they're instanceof Readable.
6125 if (!(this instanceof Writable) && !(this instanceof Duplex))
6126 return new Writable(options);
ebd8d4e8 6127
ab78acc6 6128 this._writableState = new WritableState(options, this);
ebd8d4e8 6129
ab78acc6
IC
6130 // legacy.
6131 this.writable = true;
ebd8d4e8 6132
ab78acc6 6133 Stream.call(this);
ebd8d4e8
IC
6134}
6135
ab78acc6
IC
6136// Otherwise people can pipe Writable streams, which is just wrong.
6137Writable.prototype.pipe = function() {
6138 this.emit('error', new Error('Cannot pipe. Not readable.'));
6139};
ebd8d4e8 6140
ebd8d4e8 6141
ab78acc6
IC
6142function writeAfterEnd(stream, state, cb) {
6143 var er = new Error('write after end');
6144 // TODO: defer error events consistently everywhere, not just the cb
6145 stream.emit('error', er);
6146 process.nextTick(function() {
6147 cb(er);
6148 });
ebd8d4e8
IC
6149}
6150
ab78acc6
IC
6151// If we get something that is not a buffer, string, null, or undefined,
6152// and we're not in objectMode, then that's an error.
6153// Otherwise stream chunks are all considered to be of length=1, and the
6154// watermarks determine how many objects to keep in the buffer, rather than
6155// how many bytes or characters.
6156function validChunk(stream, state, chunk, cb) {
6157 var valid = true;
6158 if (!util.isBuffer(chunk) &&
6159 !util.isString(chunk) &&
6160 !util.isNullOrUndefined(chunk) &&
6161 !state.objectMode) {
6162 var er = new TypeError('Invalid non-string/buffer chunk');
6163 stream.emit('error', er);
6164 process.nextTick(function() {
6165 cb(er);
6166 });
6167 valid = false;
6168 }
6169 return valid;
ebd8d4e8
IC
6170}
6171
ab78acc6
IC
6172Writable.prototype.write = function(chunk, encoding, cb) {
6173 var state = this._writableState;
6174 var ret = false;
ebd8d4e8 6175
ab78acc6
IC
6176 if (util.isFunction(encoding)) {
6177 cb = encoding;
6178 encoding = null;
ebd8d4e8 6179 }
ebd8d4e8 6180
ab78acc6
IC
6181 if (util.isBuffer(chunk))
6182 encoding = 'buffer';
6183 else if (!encoding)
6184 encoding = state.defaultEncoding;
6185
6186 if (!util.isFunction(cb))
6187 cb = function() {};
6188
6189 if (state.ended)
6190 writeAfterEnd(this, state, cb);
6191 else if (validChunk(this, state, chunk, cb)) {
6192 state.pendingcb++;
6193 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6194 }
ebd8d4e8 6195
ab78acc6
IC
6196 return ret;
6197};
6198
6199Writable.prototype.cork = function() {
6200 var state = this._writableState;
6201
6202 state.corked++;
6203};
ebd8d4e8 6204
ab78acc6
IC
6205Writable.prototype.uncork = function() {
6206 var state = this._writableState;
ebd8d4e8 6207
ab78acc6
IC
6208 if (state.corked) {
6209 state.corked--;
ebd8d4e8 6210
ab78acc6
IC
6211 if (!state.writing &&
6212 !state.corked &&
6213 !state.finished &&
6214 !state.bufferProcessing &&
6215 state.buffer.length)
6216 clearBuffer(this, state);
ebd8d4e8 6217 }
ab78acc6 6218};
ebd8d4e8 6219
ab78acc6
IC
6220function decodeChunk(state, chunk, encoding) {
6221 if (!state.objectMode &&
6222 state.decodeStrings !== false &&
6223 util.isString(chunk)) {
6224 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6225 }
ab78acc6 6226 return chunk;
ebd8d4e8
IC
6227}
6228
ab78acc6
IC
6229// if we're already writing something, then just put this
6230// in the queue, and wait our turn. Otherwise, call _write
6231// If we return false, then we need a drain event, so set that flag.
6232function writeOrBuffer(stream, state, chunk, encoding, cb) {
6233 chunk = decodeChunk(state, chunk, encoding);
6234 if (util.isBuffer(chunk))
6235 encoding = 'buffer';
6236 var len = state.objectMode ? 1 : chunk.length;
6237
6238 state.length += len;
6239
6240 var ret = state.length < state.highWaterMark;
6241 // we must ensure that previous needDrain will not be reset to false.
6242 if (!ret)
6243 state.needDrain = true;
6244
6245 if (state.writing || state.corked)
6246 state.buffer.push(new WriteReq(chunk, encoding, cb));
6247 else
6248 doWrite(stream, state, false, len, chunk, encoding, cb);
6249
6250 return ret;
ebd8d4e8
IC
6251}
6252
ab78acc6
IC
6253function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6254 state.writelen = len;
6255 state.writecb = cb;
6256 state.writing = true;
6257 state.sync = true;
6258 if (writev)
6259 stream._writev(chunk, state.onwrite);
6260 else
6261 stream._write(chunk, encoding, state.onwrite);
6262 state.sync = false;
ebd8d4e8
IC
6263}
6264
ab78acc6
IC
6265function onwriteError(stream, state, sync, er, cb) {
6266 if (sync)
6267 process.nextTick(function() {
6268 state.pendingcb--;
6269 cb(er);
6270 });
6271 else {
6272 state.pendingcb--;
6273 cb(er);
6274 }
ebd8d4e8 6275
ab78acc6
IC
6276 stream._writableState.errorEmitted = true;
6277 stream.emit('error', er);
6278}
ebd8d4e8 6279
ab78acc6
IC
6280function onwriteStateUpdate(state) {
6281 state.writing = false;
6282 state.writecb = null;
6283 state.length -= state.writelen;
6284 state.writelen = 0;
6285}
ebd8d4e8 6286
ab78acc6
IC
6287function onwrite(stream, er) {
6288 var state = stream._writableState;
6289 var sync = state.sync;
6290 var cb = state.writecb;
ebd8d4e8 6291
ab78acc6 6292 onwriteStateUpdate(state);
ebd8d4e8 6293
ab78acc6
IC
6294 if (er)
6295 onwriteError(stream, state, sync, er, cb);
6296 else {
6297 // Check if we're actually ready to finish, but don't emit yet
6298 var finished = needFinish(stream, state);
ebd8d4e8 6299
ab78acc6
IC
6300 if (!finished &&
6301 !state.corked &&
6302 !state.bufferProcessing &&
6303 state.buffer.length) {
6304 clearBuffer(stream, state);
6305 }
6306
6307 if (sync) {
6308 process.nextTick(function() {
6309 afterWrite(stream, state, finished, cb);
6310 });
6311 } else {
6312 afterWrite(stream, state, finished, cb);
ebd8d4e8 6313 }
ebd8d4e8
IC
6314 }
6315}
6316
ab78acc6
IC
6317function afterWrite(stream, state, finished, cb) {
6318 if (!finished)
6319 onwriteDrain(stream, state);
6320 state.pendingcb--;
6321 cb();
6322 finishMaybe(stream, state);
6323}
6324
6325// Must force callback to be called on nextTick, so that we don't
6326// emit 'drain' before the write() consumer gets the 'false' return
6327// value, and has a chance to attach a 'drain' listener.
6328function onwriteDrain(stream, state) {
6329 if (state.length === 0 && state.needDrain) {
6330 state.needDrain = false;
6331 stream.emit('drain');
ebd8d4e8
IC
6332 }
6333}
6334
ebd8d4e8 6335
ab78acc6
IC
6336// if there's something in the buffer waiting, then process it
6337function clearBuffer(stream, state) {
6338 state.bufferProcessing = true;
6339
6340 if (stream._writev && state.buffer.length > 1) {
6341 // Fast case, write everything using _writev()
6342 var cbs = [];
6343 for (var c = 0; c < state.buffer.length; c++)
6344 cbs.push(state.buffer[c].callback);
6345
6346 // count the one we are adding, as well.
6347 // TODO(isaacs) clean this up
6348 state.pendingcb++;
6349 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6350 for (var i = 0; i < cbs.length; i++) {
6351 state.pendingcb--;
6352 cbs[i](err);
6353 }
6354 });
6355
6356 // Clear buffer
6357 state.buffer = [];
6358 } else {
6359 // Slow case, write chunks one-by-one
6360 for (var c = 0; c < state.buffer.length; c++) {
6361 var entry = state.buffer[c];
6362 var chunk = entry.chunk;
6363 var encoding = entry.encoding;
6364 var cb = entry.callback;
6365 var len = state.objectMode ? 1 : chunk.length;
6366
6367 doWrite(stream, state, false, len, chunk, encoding, cb);
6368
6369 // if we didn't call the onwrite immediately, then
6370 // it means that we need to wait until it does.
6371 // also, that means that the chunk and cb are currently
6372 // being processed, so move the buffer counter past them.
6373 if (state.writing) {
6374 c++;
6375 break;
6376 }
ebd8d4e8 6377 }
ab78acc6
IC
6378
6379 if (c < state.buffer.length)
6380 state.buffer = state.buffer.slice(c);
6381 else
6382 state.buffer.length = 0;
ebd8d4e8
IC
6383 }
6384
ab78acc6 6385 state.bufferProcessing = false;
ebd8d4e8
IC
6386}
6387
ab78acc6
IC
6388Writable.prototype._write = function(chunk, encoding, cb) {
6389 cb(new Error('not implemented'));
ebd8d4e8 6390
ab78acc6 6391};
ebd8d4e8 6392
ab78acc6 6393Writable.prototype._writev = null;
ebd8d4e8 6394
ab78acc6
IC
6395Writable.prototype.end = function(chunk, encoding, cb) {
6396 var state = this._writableState;
ebd8d4e8 6397
ab78acc6
IC
6398 if (util.isFunction(chunk)) {
6399 cb = chunk;
6400 chunk = null;
6401 encoding = null;
6402 } else if (util.isFunction(encoding)) {
6403 cb = encoding;
6404 encoding = null;
6405 }
ebd8d4e8 6406
ab78acc6
IC
6407 if (!util.isNullOrUndefined(chunk))
6408 this.write(chunk, encoding);
6409
6410 // .end() fully uncorks
6411 if (state.corked) {
6412 state.corked = 1;
6413 this.uncork();
ebd8d4e8 6414 }
ab78acc6
IC
6415
6416 // ignore unnecessary end() calls.
6417 if (!state.ending && !state.finished)
6418 endWritable(this, state, cb);
6419};
6420
6421
6422function needFinish(stream, state) {
6423 return (state.ending &&
6424 state.length === 0 &&
6425 !state.finished &&
6426 !state.writing);
ebd8d4e8
IC
6427}
6428
ab78acc6
IC
6429function prefinish(stream, state) {
6430 if (!state.prefinished) {
6431 state.prefinished = true;
6432 stream.emit('prefinish');
ebd8d4e8 6433 }
ebd8d4e8
IC
6434}
6435
ab78acc6
IC
6436function finishMaybe(stream, state) {
6437 var need = needFinish(stream, state);
6438 if (need) {
6439 if (state.pendingcb === 0) {
6440 prefinish(stream, state);
6441 state.finished = true;
6442 stream.emit('finish');
6443 } else
6444 prefinish(stream, state);
6445 }
6446 return need;
6447}
ebd8d4e8 6448
ab78acc6
IC
6449function endWritable(stream, state, cb) {
6450 state.ending = true;
6451 finishMaybe(stream, state);
6452 if (cb) {
6453 if (state.finished)
6454 process.nextTick(cb);
6455 else
6456 stream.once('finish', cb);
ebd8d4e8 6457 }
ab78acc6 6458 state.ended = true;
ebd8d4e8
IC
6459}
6460
ab78acc6
IC
6461}).call(this,require('_process'))
6462},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6463(function (Buffer){
6464// Copyright Joyent, Inc. and other Node contributors.
6465//
6466// Permission is hereby granted, free of charge, to any person obtaining a
6467// copy of this software and associated documentation files (the
6468// "Software"), to deal in the Software without restriction, including
6469// without limitation the rights to use, copy, modify, merge, publish,
6470// distribute, sublicense, and/or sell copies of the Software, and to permit
6471// persons to whom the Software is furnished to do so, subject to the
6472// following conditions:
6473//
6474// The above copyright notice and this permission notice shall be included
6475// in all copies or substantial portions of the Software.
6476//
6477// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6478// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6479// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6480// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6481// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6482// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6483// USE OR OTHER DEALINGS IN THE SOFTWARE.
6484
6485// NOTE: These type checking functions intentionally don't use `instanceof`
6486// because it is fragile and can be easily faked with `Object.create()`.
6487function isArray(ar) {
6488 return Array.isArray(ar);
ebd8d4e8 6489}
ab78acc6 6490exports.isArray = isArray;
ebd8d4e8 6491
ab78acc6
IC
6492function isBoolean(arg) {
6493 return typeof arg === 'boolean';
ebd8d4e8 6494}
ab78acc6 6495exports.isBoolean = isBoolean;
ebd8d4e8 6496
ab78acc6
IC
6497function isNull(arg) {
6498 return arg === null;
6499}
6500exports.isNull = isNull;
ebd8d4e8 6501
ab78acc6
IC
6502function isNullOrUndefined(arg) {
6503 return arg == null;
6504}
6505exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6506
ab78acc6
IC
6507function isNumber(arg) {
6508 return typeof arg === 'number';
ebd8d4e8 6509}
ab78acc6 6510exports.isNumber = isNumber;
ebd8d4e8 6511
ab78acc6
IC
6512function isString(arg) {
6513 return typeof arg === 'string';
6514}
6515exports.isString = isString;
ebd8d4e8 6516
ab78acc6
IC
6517function isSymbol(arg) {
6518 return typeof arg === 'symbol';
6519}
6520exports.isSymbol = isSymbol;
ebd8d4e8 6521
ab78acc6
IC
6522function isUndefined(arg) {
6523 return arg === void 0;
ebd8d4e8 6524}
ab78acc6 6525exports.isUndefined = isUndefined;
ebd8d4e8 6526
ab78acc6
IC
6527function isRegExp(re) {
6528 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6529}
ab78acc6 6530exports.isRegExp = isRegExp;
ebd8d4e8 6531
ab78acc6
IC
6532function isObject(arg) {
6533 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6534}
ab78acc6 6535exports.isObject = isObject;
ebd8d4e8 6536
ab78acc6
IC
6537function isDate(d) {
6538 return isObject(d) && objectToString(d) === '[object Date]';
6539}
6540exports.isDate = isDate;
ebd8d4e8 6541
ab78acc6
IC
6542function isError(e) {
6543 return isObject(e) &&
6544 (objectToString(e) === '[object Error]' || e instanceof Error);
6545}
6546exports.isError = isError;
ebd8d4e8 6547
ab78acc6
IC
6548function isFunction(arg) {
6549 return typeof arg === 'function';
6550}
6551exports.isFunction = isFunction;
6552
6553function isPrimitive(arg) {
6554 return arg === null ||
6555 typeof arg === 'boolean' ||
6556 typeof arg === 'number' ||
6557 typeof arg === 'string' ||
6558 typeof arg === 'symbol' || // ES6 symbol
6559 typeof arg === 'undefined';
ebd8d4e8 6560}
ab78acc6 6561exports.isPrimitive = isPrimitive;
ebd8d4e8 6562
ab78acc6
IC
6563function isBuffer(arg) {
6564 return Buffer.isBuffer(arg);
ebd8d4e8 6565}
ab78acc6 6566exports.isBuffer = isBuffer;
ebd8d4e8 6567
ab78acc6
IC
6568function objectToString(o) {
6569 return Object.prototype.toString.call(o);
ebd8d4e8 6570}
ab78acc6
IC
6571}).call(this,require("buffer").Buffer)
6572},{"buffer":7}],22:[function(require,module,exports){
6573module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6574
ab78acc6
IC
6575},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6576exports = module.exports = require('./lib/_stream_readable.js');
6577exports.Stream = require('stream');
6578exports.Readable = exports;
6579exports.Writable = require('./lib/_stream_writable.js');
6580exports.Duplex = require('./lib/_stream_duplex.js');
6581exports.Transform = require('./lib/_stream_transform.js');
6582exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6583
ab78acc6
IC
6584},{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
6585module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6586
ab78acc6
IC
6587},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6588module.exports = require("./lib/_stream_writable.js")
6589
6590},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6591// Copyright Joyent, Inc. and other Node contributors.
6592//
6593// Permission is hereby granted, free of charge, to any person obtaining a
6594// copy of this software and associated documentation files (the
6595// "Software"), to deal in the Software without restriction, including
6596// without limitation the rights to use, copy, modify, merge, publish,
6597// distribute, sublicense, and/or sell copies of the Software, and to permit
6598// persons to whom the Software is furnished to do so, subject to the
6599// following conditions:
6600//
6601// The above copyright notice and this permission notice shall be included
6602// in all copies or substantial portions of the Software.
6603//
6604// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6605// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6606// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6607// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6608// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6609// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6610// USE OR OTHER DEALINGS IN THE SOFTWARE.
6611
6612module.exports = Stream;
6613
6614var EE = require('events').EventEmitter;
6615var inherits = require('inherits');
6616
6617inherits(Stream, EE);
6618Stream.Readable = require('readable-stream/readable.js');
6619Stream.Writable = require('readable-stream/writable.js');
6620Stream.Duplex = require('readable-stream/duplex.js');
6621Stream.Transform = require('readable-stream/transform.js');
6622Stream.PassThrough = require('readable-stream/passthrough.js');
6623
6624// Backwards-compat with node 0.4.x
6625Stream.Stream = Stream;
6626
6627
6628
6629// old-style streams. Note that the pipe method (the only relevant
6630// part of this class) is overridden in the Readable class.
6631
6632function Stream() {
6633 EE.call(this);
ebd8d4e8
IC
6634}
6635
ab78acc6
IC
6636Stream.prototype.pipe = function(dest, options) {
6637 var source = this;
ebd8d4e8 6638
ab78acc6
IC
6639 function ondata(chunk) {
6640 if (dest.writable) {
6641 if (false === dest.write(chunk) && source.pause) {
6642 source.pause();
6643 }
6644 }
6645 }
ebd8d4e8 6646
ab78acc6 6647 source.on('data', ondata);
ebd8d4e8 6648
ab78acc6
IC
6649 function ondrain() {
6650 if (source.readable && source.resume) {
6651 source.resume();
6652 }
6653 }
ebd8d4e8 6654
ab78acc6 6655 dest.on('drain', ondrain);
ebd8d4e8 6656
ab78acc6
IC
6657 // If the 'end' option is not supplied, dest.end() will be called when
6658 // source gets the 'end' or 'close' events. Only dest.end() once.
6659 if (!dest._isStdio && (!options || options.end !== false)) {
6660 source.on('end', onend);
6661 source.on('close', onclose);
ebd8d4e8
IC
6662 }
6663
ab78acc6
IC
6664 var didOnEnd = false;
6665 function onend() {
6666 if (didOnEnd) return;
6667 didOnEnd = true;
ebd8d4e8 6668
ab78acc6
IC
6669 dest.end();
6670 }
ebd8d4e8 6671
ebd8d4e8 6672
ab78acc6
IC
6673 function onclose() {
6674 if (didOnEnd) return;
6675 didOnEnd = true;
ebd8d4e8 6676
ab78acc6 6677 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6678 }
6679
ab78acc6
IC
6680 // don't leave dangling pipes when there are errors.
6681 function onerror(er) {
6682 cleanup();
6683 if (EE.listenerCount(this, 'error') === 0) {
6684 throw er; // Unhandled stream error in pipe.
6685 }
6686 }
ebd8d4e8 6687
ab78acc6
IC
6688 source.on('error', onerror);
6689 dest.on('error', onerror);
ebd8d4e8 6690
ab78acc6
IC
6691 // remove all the event listeners that were added.
6692 function cleanup() {
6693 source.removeListener('data', ondata);
6694 dest.removeListener('drain', ondrain);
ebd8d4e8 6695
ab78acc6
IC
6696 source.removeListener('end', onend);
6697 source.removeListener('close', onclose);
6698
6699 source.removeListener('error', onerror);
6700 dest.removeListener('error', onerror);
6701
6702 source.removeListener('end', cleanup);
6703 source.removeListener('close', cleanup);
6704
6705 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6706 }
6707
ab78acc6
IC
6708 source.on('end', cleanup);
6709 source.on('close', cleanup);
ebd8d4e8 6710
ab78acc6 6711 dest.on('close', cleanup);
ebd8d4e8 6712
ab78acc6 6713 dest.emit('pipe', source);
ebd8d4e8 6714
ab78acc6
IC
6715 // Allow for unix-like usage: A.pipe(B).pipe(C)
6716 return dest;
6717};
ebd8d4e8 6718
ab78acc6
IC
6719},{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
6720// Copyright Joyent, Inc. and other Node contributors.
6721//
6722// Permission is hereby granted, free of charge, to any person obtaining a
6723// copy of this software and associated documentation files (the
6724// "Software"), to deal in the Software without restriction, including
6725// without limitation the rights to use, copy, modify, merge, publish,
6726// distribute, sublicense, and/or sell copies of the Software, and to permit
6727// persons to whom the Software is furnished to do so, subject to the
6728// following conditions:
6729//
6730// The above copyright notice and this permission notice shall be included
6731// in all copies or substantial portions of the Software.
6732//
6733// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6734// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6735// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6736// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6737// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6738// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6739// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6740
ab78acc6 6741var Buffer = require('buffer').Buffer;
ebd8d4e8 6742
ab78acc6
IC
6743var isBufferEncoding = Buffer.isEncoding
6744 || function(encoding) {
6745 switch (encoding && encoding.toLowerCase()) {
6746 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
6747 default: return false;
6748 }
6749 }
ebd8d4e8 6750
ebd8d4e8 6751
ab78acc6
IC
6752function assertEncoding(encoding) {
6753 if (encoding && !isBufferEncoding(encoding)) {
6754 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6755 }
ebd8d4e8
IC
6756}
6757
ab78acc6
IC
6758// StringDecoder provides an interface for efficiently splitting a series of
6759// buffers into a series of JS strings without breaking apart multi-byte
6760// characters. CESU-8 is handled as part of the UTF-8 encoding.
6761//
6762// @TODO Handling all encodings inside a single object makes it very difficult
6763// to reason about this code, so it should be split up in the future.
6764// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6765// points as used by CESU-8.
6766var StringDecoder = exports.StringDecoder = function(encoding) {
6767 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6768 assertEncoding(encoding);
6769 switch (this.encoding) {
6770 case 'utf8':
6771 // CESU-8 represents each of Surrogate Pair by 3-bytes
6772 this.surrogateSize = 3;
6773 break;
6774 case 'ucs2':
6775 case 'utf16le':
6776 // UTF-16 represents each of Surrogate Pair by 2-bytes
6777 this.surrogateSize = 2;
6778 this.detectIncompleteChar = utf16DetectIncompleteChar;
6779 break;
6780 case 'base64':
6781 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6782 this.surrogateSize = 3;
6783 this.detectIncompleteChar = base64DetectIncompleteChar;
6784 break;
6785 default:
6786 this.write = passThroughWrite;
6787 return;
6788 }
ebd8d4e8 6789
ab78acc6
IC
6790 // Enough space to store all bytes of a single character. UTF-8 needs 4
6791 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6792 this.charBuffer = new Buffer(6);
6793 // Number of bytes received for the current incomplete multi-byte character.
6794 this.charReceived = 0;
6795 // Number of bytes expected for the current incomplete multi-byte character.
6796 this.charLength = 0;
6797};
ebd8d4e8 6798
ebd8d4e8 6799
ab78acc6
IC
6800// write decodes the given buffer and returns it as JS string that is
6801// guaranteed to not contain any partial multi-byte characters. Any partial
6802// character found at the end of the buffer is buffered up, and will be
6803// returned when calling write again with the remaining bytes.
6804//
6805// Note: Converting a Buffer containing an orphan surrogate to a String
6806// currently works, but converting a String to a Buffer (via `new Buffer`, or
6807// Buffer#write) will replace incomplete surrogates with the unicode
6808// replacement character. See https://codereview.chromium.org/121173009/ .
6809StringDecoder.prototype.write = function(buffer) {
6810 var charStr = '';
6811 // if our last write ended with an incomplete multibyte character
6812 while (this.charLength) {
6813 // determine how many remaining bytes this buffer has to offer for this char
6814 var available = (buffer.length >= this.charLength - this.charReceived) ?
6815 this.charLength - this.charReceived :
6816 buffer.length;
6817
6818 // add the new bytes to the char buffer
6819 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6820 this.charReceived += available;
6821
6822 if (this.charReceived < this.charLength) {
6823 // still not enough chars in this buffer? wait for more ...
6824 return '';
6825 }
6826
6827 // remove bytes belonging to the current character from the buffer
6828 buffer = buffer.slice(available, buffer.length);
6829
6830 // get the character that was split
6831 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6832
6833 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6834 var charCode = charStr.charCodeAt(charStr.length - 1);
6835 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6836 this.charLength += this.surrogateSize;
6837 charStr = '';
6838 continue;
6839 }
6840 this.charReceived = this.charLength = 0;
ebd8d4e8 6841
ab78acc6
IC
6842 // if there are no more bytes in this buffer, just emit our char
6843 if (buffer.length === 0) {
6844 return charStr;
6845 }
6846 break;
ebd8d4e8 6847 }
ebd8d4e8 6848
ab78acc6
IC
6849 // determine and set charLength / charReceived
6850 this.detectIncompleteChar(buffer);
ebd8d4e8 6851
ab78acc6
IC
6852 var end = buffer.length;
6853 if (this.charLength) {
6854 // buffer the incomplete character bytes we got
6855 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6856 end -= this.charReceived;
ebd8d4e8
IC
6857 }
6858
ab78acc6 6859 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 6860
ab78acc6
IC
6861 var end = charStr.length - 1;
6862 var charCode = charStr.charCodeAt(end);
6863 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6864 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6865 var size = this.surrogateSize;
6866 this.charLength += size;
6867 this.charReceived += size;
6868 this.charBuffer.copy(this.charBuffer, size, 0, size);
6869 buffer.copy(this.charBuffer, 0, 0, size);
6870 return charStr.substring(0, end);
ebd8d4e8
IC
6871 }
6872
ab78acc6
IC
6873 // or just emit the charStr
6874 return charStr;
6875};
ebd8d4e8 6876
ab78acc6
IC
6877// detectIncompleteChar determines if there is an incomplete UTF-8 character at
6878// the end of the given buffer. If so, it sets this.charLength to the byte
6879// length that character, and sets this.charReceived to the number of bytes
6880// that are available for this character.
6881StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6882 // determine how many bytes we have to check at the end of this buffer
6883 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 6884
ab78acc6
IC
6885 // Figure out if one of the last i bytes of our buffer announces an
6886 // incomplete char.
6887 for (; i > 0; i--) {
6888 var c = buffer[buffer.length - i];
ebd8d4e8 6889
ab78acc6 6890 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 6891
ab78acc6
IC
6892 // 110XXXXX
6893 if (i == 1 && c >> 5 == 0x06) {
6894 this.charLength = 2;
6895 break;
6896 }
ebd8d4e8 6897
ab78acc6
IC
6898 // 1110XXXX
6899 if (i <= 2 && c >> 4 == 0x0E) {
6900 this.charLength = 3;
6901 break;
6902 }
ebd8d4e8 6903
ab78acc6
IC
6904 // 11110XXX
6905 if (i <= 3 && c >> 3 == 0x1E) {
6906 this.charLength = 4;
6907 break;
6908 }
6909 }
6910 this.charReceived = i;
6911};
ebd8d4e8 6912
ab78acc6
IC
6913StringDecoder.prototype.end = function(buffer) {
6914 var res = '';
6915 if (buffer && buffer.length)
6916 res = this.write(buffer);
ebd8d4e8 6917
ab78acc6
IC
6918 if (this.charReceived) {
6919 var cr = this.charReceived;
6920 var buf = this.charBuffer;
6921 var enc = this.encoding;
6922 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
6923 }
6924
ab78acc6
IC
6925 return res;
6926};
ebd8d4e8 6927
ab78acc6
IC
6928function passThroughWrite(buffer) {
6929 return buffer.toString(this.encoding);
ebd8d4e8
IC
6930}
6931
ab78acc6
IC
6932function utf16DetectIncompleteChar(buffer) {
6933 this.charReceived = buffer.length % 2;
6934 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
6935}
6936
ab78acc6
IC
6937function base64DetectIncompleteChar(buffer) {
6938 this.charReceived = buffer.length % 3;
6939 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
6940}
6941
ab78acc6
IC
6942},{"buffer":7}],28:[function(require,module,exports){
6943module.exports = function isBuffer(arg) {
6944 return arg && typeof arg === 'object'
6945 && typeof arg.copy === 'function'
6946 && typeof arg.fill === 'function'
6947 && typeof arg.readUInt8 === 'function';
6948}
6949},{}],29:[function(require,module,exports){
6950(function (process,global){
6951// Copyright Joyent, Inc. and other Node contributors.
6952//
6953// Permission is hereby granted, free of charge, to any person obtaining a
6954// copy of this software and associated documentation files (the
6955// "Software"), to deal in the Software without restriction, including
6956// without limitation the rights to use, copy, modify, merge, publish,
6957// distribute, sublicense, and/or sell copies of the Software, and to permit
6958// persons to whom the Software is furnished to do so, subject to the
6959// following conditions:
6960//
6961// The above copyright notice and this permission notice shall be included
6962// in all copies or substantial portions of the Software.
6963//
6964// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6965// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6966// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6967// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6968// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6969// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6970// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6971
ab78acc6
IC
6972var formatRegExp = /%[sdj%]/g;
6973exports.format = function(f) {
6974 if (!isString(f)) {
6975 var objects = [];
6976 for (var i = 0; i < arguments.length; i++) {
6977 objects.push(inspect(arguments[i]));
6978 }
6979 return objects.join(' ');
6980 }
ebd8d4e8 6981
ab78acc6
IC
6982 var i = 1;
6983 var args = arguments;
6984 var len = args.length;
6985 var str = String(f).replace(formatRegExp, function(x) {
6986 if (x === '%%') return '%';
6987 if (i >= len) return x;
6988 switch (x) {
6989 case '%s': return String(args[i++]);
6990 case '%d': return Number(args[i++]);
6991 case '%j':
6992 try {
6993 return JSON.stringify(args[i++]);
6994 } catch (_) {
6995 return '[Circular]';
6996 }
6997 default:
6998 return x;
6999 }
7000 });
7001 for (var x = args[i]; i < len; x = args[++i]) {
7002 if (isNull(x) || !isObject(x)) {
7003 str += ' ' + x;
7004 } else {
7005 str += ' ' + inspect(x);
7006 }
7007 }
7008 return str;
7009};
ebd8d4e8 7010
ebd8d4e8 7011
ab78acc6
IC
7012// Mark that a method should not be used.
7013// Returns a modified function which warns once by default.
7014// If --no-deprecation is set, then it is a no-op.
7015exports.deprecate = function(fn, msg) {
7016 // Allow for deprecating things in the process of starting up.
7017 if (isUndefined(global.process)) {
7018 return function() {
7019 return exports.deprecate(fn, msg).apply(this, arguments);
7020 };
7021 }
ebd8d4e8 7022
ab78acc6
IC
7023 if (process.noDeprecation === true) {
7024 return fn;
7025 }
ebd8d4e8 7026
ab78acc6
IC
7027 var warned = false;
7028 function deprecated() {
7029 if (!warned) {
7030 if (process.throwDeprecation) {
7031 throw new Error(msg);
7032 } else if (process.traceDeprecation) {
7033 console.trace(msg);
7034 } else {
7035 console.error(msg);
7036 }
7037 warned = true;
7038 }
7039 return fn.apply(this, arguments);
7040 }
ebd8d4e8 7041
ab78acc6
IC
7042 return deprecated;
7043};
ebd8d4e8 7044
ebd8d4e8 7045
ab78acc6
IC
7046var debugs = {};
7047var debugEnviron;
7048exports.debuglog = function(set) {
7049 if (isUndefined(debugEnviron))
7050 debugEnviron = process.env.NODE_DEBUG || '';
7051 set = set.toUpperCase();
7052 if (!debugs[set]) {
7053 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7054 var pid = process.pid;
7055 debugs[set] = function() {
7056 var msg = exports.format.apply(exports, arguments);
7057 console.error('%s %d: %s', set, pid, msg);
7058 };
7059 } else {
7060 debugs[set] = function() {};
ebd8d4e8
IC
7061 }
7062 }
ab78acc6
IC
7063 return debugs[set];
7064};
ebd8d4e8 7065
ebd8d4e8
IC
7066
7067/**
ab78acc6
IC
7068 * Echos the value of a value. Trys to print the value out
7069 * in the best way possible given the different types.
7070 *
7071 * @param {Object} obj The object to print out.
7072 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7073 */
ab78acc6
IC
7074/* legacy: obj, showHidden, depth, colors*/
7075function inspect(obj, opts) {
7076 // default options
7077 var ctx = {
7078 seen: [],
7079 stylize: stylizeNoColor
7080 };
7081 // legacy...
7082 if (arguments.length >= 3) ctx.depth = arguments[2];
7083 if (arguments.length >= 4) ctx.colors = arguments[3];
7084 if (isBoolean(opts)) {
7085 // legacy...
7086 ctx.showHidden = opts;
7087 } else if (opts) {
7088 // got an "options" object
7089 exports._extend(ctx, opts);
ebd8d4e8 7090 }
ab78acc6
IC
7091 // set default options
7092 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7093 if (isUndefined(ctx.depth)) ctx.depth = 2;
7094 if (isUndefined(ctx.colors)) ctx.colors = false;
7095 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7096 if (ctx.colors) ctx.stylize = stylizeWithColor;
7097 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7098}
ab78acc6 7099exports.inspect = inspect;
ebd8d4e8 7100
ebd8d4e8 7101
ab78acc6
IC
7102// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7103inspect.colors = {
7104 'bold' : [1, 22],
7105 'italic' : [3, 23],
7106 'underline' : [4, 24],
7107 'inverse' : [7, 27],
7108 'white' : [37, 39],
7109 'grey' : [90, 39],
7110 'black' : [30, 39],
7111 'blue' : [34, 39],
7112 'cyan' : [36, 39],
7113 'green' : [32, 39],
7114 'magenta' : [35, 39],
7115 'red' : [31, 39],
7116 'yellow' : [33, 39]
7117};
ebd8d4e8 7118
ab78acc6
IC
7119// Don't use 'blue' not visible on cmd.exe
7120inspect.styles = {
7121 'special': 'cyan',
7122 'number': 'yellow',
7123 'boolean': 'yellow',
7124 'undefined': 'grey',
7125 'null': 'bold',
7126 'string': 'green',
7127 'date': 'magenta',
7128 // "name": intentionally not styling
7129 'regexp': 'red'
7130};
ebd8d4e8 7131
ebd8d4e8 7132
ab78acc6
IC
7133function stylizeWithColor(str, styleType) {
7134 var style = inspect.styles[styleType];
ebd8d4e8 7135
ab78acc6
IC
7136 if (style) {
7137 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7138 '\u001b[' + inspect.colors[style][1] + 'm';
7139 } else {
7140 return str;
ebd8d4e8 7141 }
ebd8d4e8
IC
7142}
7143
ebd8d4e8 7144
ab78acc6
IC
7145function stylizeNoColor(str, styleType) {
7146 return str;
ebd8d4e8
IC
7147}
7148
ebd8d4e8 7149
ab78acc6
IC
7150function arrayToHash(array) {
7151 var hash = {};
ebd8d4e8 7152
ab78acc6
IC
7153 array.forEach(function(val, idx) {
7154 hash[val] = true;
7155 });
ebd8d4e8 7156
ab78acc6 7157 return hash;
ebd8d4e8
IC
7158}
7159
ebd8d4e8 7160
ab78acc6
IC
7161function formatValue(ctx, value, recurseTimes) {
7162 // Provide a hook for user-specified inspect functions.
7163 // Check that value is an object with an inspect function on it
7164 if (ctx.customInspect &&
7165 value &&
7166 isFunction(value.inspect) &&
7167 // Filter out the util module, it's inspect function is special
7168 value.inspect !== exports.inspect &&
7169 // Also filter out any prototype objects using the circular check.
7170 !(value.constructor && value.constructor.prototype === value)) {
7171 var ret = value.inspect(recurseTimes, ctx);
7172 if (!isString(ret)) {
7173 ret = formatValue(ctx, ret, recurseTimes);
7174 }
7175 return ret;
ebd8d4e8 7176 }
ebd8d4e8 7177
ab78acc6
IC
7178 // Primitive types cannot have properties
7179 var primitive = formatPrimitive(ctx, value);
7180 if (primitive) {
7181 return primitive;
ebd8d4e8
IC
7182 }
7183
ab78acc6
IC
7184 // Look up the keys of the object.
7185 var keys = Object.keys(value);
7186 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7187
ab78acc6
IC
7188 if (ctx.showHidden) {
7189 keys = Object.getOwnPropertyNames(value);
7190 }
ebd8d4e8 7191
ab78acc6
IC
7192 // IE doesn't make error fields non-enumerable
7193 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7194 if (isError(value)
7195 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7196 return formatError(value);
ebd8d4e8 7197 }
ebd8d4e8 7198
ab78acc6
IC
7199 // Some type of object without properties can be shortcutted.
7200 if (keys.length === 0) {
7201 if (isFunction(value)) {
7202 var name = value.name ? ': ' + value.name : '';
7203 return ctx.stylize('[Function' + name + ']', 'special');
7204 }
7205 if (isRegExp(value)) {
7206 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7207 }
7208 if (isDate(value)) {
7209 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7210 }
7211 if (isError(value)) {
7212 return formatError(value);
7213 }
ebd8d4e8 7214 }
ebd8d4e8 7215
ab78acc6 7216 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7217
ab78acc6
IC
7218 // Make Array say that they are Array
7219 if (isArray(value)) {
7220 array = true;
7221 braces = ['[', ']'];
7222 }
ebd8d4e8 7223
ab78acc6
IC
7224 // Make functions say that they are functions
7225 if (isFunction(value)) {
7226 var n = value.name ? ': ' + value.name : '';
7227 base = ' [Function' + n + ']';
7228 }
ebd8d4e8 7229
ab78acc6
IC
7230 // Make RegExps say that they are RegExps
7231 if (isRegExp(value)) {
7232 base = ' ' + RegExp.prototype.toString.call(value);
7233 }
ebd8d4e8 7234
ab78acc6
IC
7235 // Make dates with properties first say the date
7236 if (isDate(value)) {
7237 base = ' ' + Date.prototype.toUTCString.call(value);
7238 }
ebd8d4e8 7239
ab78acc6
IC
7240 // Make error with message first say the error
7241 if (isError(value)) {
7242 base = ' ' + formatError(value);
7243 }
ebd8d4e8 7244
ab78acc6
IC
7245 if (keys.length === 0 && (!array || value.length == 0)) {
7246 return braces[0] + base + braces[1];
7247 }
ebd8d4e8 7248
ab78acc6
IC
7249 if (recurseTimes < 0) {
7250 if (isRegExp(value)) {
7251 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7252 } else {
7253 return ctx.stylize('[Object]', 'special');
7254 }
7255 }
ebd8d4e8 7256
ab78acc6 7257 ctx.seen.push(value);
ebd8d4e8 7258
ab78acc6
IC
7259 var output;
7260 if (array) {
7261 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7262 } else {
7263 output = keys.map(function(key) {
7264 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7265 });
7266 }
ebd8d4e8 7267
ab78acc6 7268 ctx.seen.pop();
ebd8d4e8 7269
ab78acc6
IC
7270 return reduceToSingleString(output, base, braces);
7271}
ebd8d4e8 7272
ebd8d4e8 7273
ab78acc6
IC
7274function formatPrimitive(ctx, value) {
7275 if (isUndefined(value))
7276 return ctx.stylize('undefined', 'undefined');
7277 if (isString(value)) {
7278 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7279 .replace(/'/g, "\\'")
7280 .replace(/\\"/g, '"') + '\'';
7281 return ctx.stylize(simple, 'string');
7282 }
7283 if (isNumber(value))
7284 return ctx.stylize('' + value, 'number');
7285 if (isBoolean(value))
7286 return ctx.stylize('' + value, 'boolean');
7287 // For some reason typeof null is "object", so special case here.
7288 if (isNull(value))
7289 return ctx.stylize('null', 'null');
7290}
ebd8d4e8 7291
ebd8d4e8 7292
ab78acc6
IC
7293function formatError(value) {
7294 return '[' + Error.prototype.toString.call(value) + ']';
7295}
ebd8d4e8 7296
ebd8d4e8 7297
ab78acc6
IC
7298function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7299 var output = [];
7300 for (var i = 0, l = value.length; i < l; ++i) {
7301 if (hasOwnProperty(value, String(i))) {
7302 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7303 String(i), true));
7304 } else {
7305 output.push('');
7306 }
7307 }
7308 keys.forEach(function(key) {
7309 if (!key.match(/^\d+$/)) {
7310 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7311 key, true));
7312 }
7313 });
7314 return output;
7315}
ebd8d4e8 7316
ebd8d4e8 7317
ab78acc6
IC
7318function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7319 var name, str, desc;
7320 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7321 if (desc.get) {
7322 if (desc.set) {
7323 str = ctx.stylize('[Getter/Setter]', 'special');
7324 } else {
7325 str = ctx.stylize('[Getter]', 'special');
7326 }
7327 } else {
7328 if (desc.set) {
7329 str = ctx.stylize('[Setter]', 'special');
7330 }
7331 }
7332 if (!hasOwnProperty(visibleKeys, key)) {
7333 name = '[' + key + ']';
7334 }
7335 if (!str) {
7336 if (ctx.seen.indexOf(desc.value) < 0) {
7337 if (isNull(recurseTimes)) {
7338 str = formatValue(ctx, desc.value, null);
7339 } else {
7340 str = formatValue(ctx, desc.value, recurseTimes - 1);
7341 }
7342 if (str.indexOf('\n') > -1) {
7343 if (array) {
7344 str = str.split('\n').map(function(line) {
7345 return ' ' + line;
7346 }).join('\n').substr(2);
7347 } else {
7348 str = '\n' + str.split('\n').map(function(line) {
7349 return ' ' + line;
7350 }).join('\n');
7351 }
7352 }
7353 } else {
7354 str = ctx.stylize('[Circular]', 'special');
7355 }
7356 }
7357 if (isUndefined(name)) {
7358 if (array && key.match(/^\d+$/)) {
7359 return str;
7360 }
7361 name = JSON.stringify('' + key);
7362 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7363 name = name.substr(1, name.length - 2);
7364 name = ctx.stylize(name, 'name');
7365 } else {
7366 name = name.replace(/'/g, "\\'")
7367 .replace(/\\"/g, '"')
7368 .replace(/(^"|"$)/g, "'");
7369 name = ctx.stylize(name, 'string');
7370 }
7371 }
ebd8d4e8 7372
ab78acc6
IC
7373 return name + ': ' + str;
7374}
ebd8d4e8 7375
ebd8d4e8 7376
ab78acc6
IC
7377function reduceToSingleString(output, base, braces) {
7378 var numLinesEst = 0;
7379 var length = output.reduce(function(prev, cur) {
7380 numLinesEst++;
7381 if (cur.indexOf('\n') >= 0) numLinesEst++;
7382 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7383 }, 0);
ebd8d4e8 7384
ab78acc6
IC
7385 if (length > 60) {
7386 return braces[0] +
7387 (base === '' ? '' : base + '\n ') +
7388 ' ' +
7389 output.join(',\n ') +
7390 ' ' +
7391 braces[1];
7392 }
ebd8d4e8 7393
ab78acc6
IC
7394 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7395}
ebd8d4e8 7396
ebd8d4e8 7397
ab78acc6
IC
7398// NOTE: These type checking functions intentionally don't use `instanceof`
7399// because it is fragile and can be easily faked with `Object.create()`.
7400function isArray(ar) {
7401 return Array.isArray(ar);
7402}
7403exports.isArray = isArray;
ebd8d4e8 7404
ab78acc6
IC
7405function isBoolean(arg) {
7406 return typeof arg === 'boolean';
7407}
7408exports.isBoolean = isBoolean;
ebd8d4e8 7409
ab78acc6
IC
7410function isNull(arg) {
7411 return arg === null;
7412}
7413exports.isNull = isNull;
ebd8d4e8 7414
ab78acc6
IC
7415function isNullOrUndefined(arg) {
7416 return arg == null;
7417}
7418exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7419
ab78acc6
IC
7420function isNumber(arg) {
7421 return typeof arg === 'number';
7422}
7423exports.isNumber = isNumber;
ebd8d4e8 7424
ab78acc6
IC
7425function isString(arg) {
7426 return typeof arg === 'string';
7427}
7428exports.isString = isString;
ebd8d4e8 7429
ab78acc6
IC
7430function isSymbol(arg) {
7431 return typeof arg === 'symbol';
7432}
7433exports.isSymbol = isSymbol;
ebd8d4e8 7434
ab78acc6
IC
7435function isUndefined(arg) {
7436 return arg === void 0;
7437}
7438exports.isUndefined = isUndefined;
ebd8d4e8 7439
ab78acc6
IC
7440function isRegExp(re) {
7441 return isObject(re) && objectToString(re) === '[object RegExp]';
7442}
7443exports.isRegExp = isRegExp;
ebd8d4e8 7444
ab78acc6
IC
7445function isObject(arg) {
7446 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7447}
ab78acc6 7448exports.isObject = isObject;
ebd8d4e8 7449
ab78acc6
IC
7450function isDate(d) {
7451 return isObject(d) && objectToString(d) === '[object Date]';
7452}
7453exports.isDate = isDate;
ebd8d4e8 7454
ab78acc6
IC
7455function isError(e) {
7456 return isObject(e) &&
7457 (objectToString(e) === '[object Error]' || e instanceof Error);
7458}
7459exports.isError = isError;
ebd8d4e8 7460
ab78acc6
IC
7461function isFunction(arg) {
7462 return typeof arg === 'function';
7463}
7464exports.isFunction = isFunction;
ebd8d4e8 7465
ab78acc6
IC
7466function isPrimitive(arg) {
7467 return arg === null ||
7468 typeof arg === 'boolean' ||
7469 typeof arg === 'number' ||
7470 typeof arg === 'string' ||
7471 typeof arg === 'symbol' || // ES6 symbol
7472 typeof arg === 'undefined';
7473}
7474exports.isPrimitive = isPrimitive;
ebd8d4e8 7475
ab78acc6 7476exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7477
ab78acc6
IC
7478function objectToString(o) {
7479 return Object.prototype.toString.call(o);
7480}
ebd8d4e8 7481
ebd8d4e8 7482
ab78acc6
IC
7483function pad(n) {
7484 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7485}
ebd8d4e8 7486
ebd8d4e8 7487
ab78acc6
IC
7488var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7489 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7490
ab78acc6
IC
7491// 26 Feb 16:19:34
7492function timestamp() {
7493 var d = new Date();
7494 var time = [pad(d.getHours()),
7495 pad(d.getMinutes()),
7496 pad(d.getSeconds())].join(':');
7497 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7498}
7499
ab78acc6
IC
7500
7501// log is just a thin wrapper to console.log that prepends a timestamp
7502exports.log = function() {
7503 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7504};
7505
ab78acc6
IC
7506
7507/**
7508 * Inherit the prototype methods from one constructor into another.
7509 *
7510 * The Function.prototype.inherits from lang.js rewritten as a standalone
7511 * function (not on Function.prototype). NOTE: If this file is to be loaded
7512 * during bootstrapping this function needs to be rewritten using some native
7513 * functions as prototype setup using normal JavaScript does not work as
7514 * expected during bootstrapping (see mirror.js in r114903).
7515 *
7516 * @param {function} ctor Constructor function which needs to inherit the
7517 * prototype.
7518 * @param {function} superCtor Constructor function to inherit prototype from.
7519 */
7520exports.inherits = require('inherits');
7521
7522exports._extend = function(origin, add) {
7523 // Don't do anything if add isn't an object
7524 if (!add || !isObject(add)) return origin;
7525
7526 var keys = Object.keys(add);
7527 var i = keys.length;
7528 while (i--) {
7529 origin[keys[i]] = add[keys[i]];
7530 }
7531 return origin;
7532};
7533
7534function hasOwnProperty(obj, prop) {
7535 return Object.prototype.hasOwnProperty.call(obj, prop);
7536}
7537
7538}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7539},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7540// Base58 encoding/decoding
7541// Originally written by Mike Hearn for BitcoinJ
7542// Copyright (c) 2011 Google Inc
7543// Ported to JavaScript by Stefan Thomas
7544// Merged Buffer refactorings from base58-native by Stephen Pair
7545// Copyright (c) 2013 BitPay Inc
7546
ebd8d4e8 7547var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7548var ALPHABET_MAP = {}
7549for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7550 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7551}
ab78acc6 7552var BASE = 58
ebd8d4e8
IC
7553
7554function encode(buffer) {
ab78acc6
IC
7555 if (buffer.length === 0) return ''
7556
7557 var i, j, digits = [0]
7558 for (i = 0; i < buffer.length; i++) {
7559 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7560
7561 digits[0] += buffer[i]
ebd8d4e8 7562
ab78acc6
IC
7563 var carry = 0
7564 for (j = 0; j < digits.length; ++j) {
7565 digits[j] += carry
ebd8d4e8 7566
ab78acc6
IC
7567 carry = (digits[j] / BASE) | 0
7568 digits[j] %= BASE
7569 }
7570
7571 while (carry) {
7572 digits.push(carry % BASE)
7573
7574 carry = (carry / BASE) | 0
7575 }
ebd8d4e8
IC
7576 }
7577
7578 // deal with leading zeros
ab78acc6 7579 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7580
ab78acc6
IC
7581 // convert digits to a string
7582 var stringOutput = ""
7583 for (var i = digits.length - 1; i >= 0; i--) {
7584 stringOutput = stringOutput + ALPHABET[digits[i]]
7585 }
7586 return stringOutput
ebd8d4e8
IC
7587}
7588
7589function decode(string) {
ab78acc6 7590 if (string.length === 0) return []
ebd8d4e8 7591
ab78acc6
IC
7592 var i, j, bytes = [0]
7593 for (i = 0; i < string.length; i++) {
7594 var c = string[i]
7595 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7596
ab78acc6
IC
7597 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7598 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7599
ab78acc6
IC
7600 var carry = 0
7601 for (j = 0; j < bytes.length; ++j) {
7602 bytes[j] += carry
ebd8d4e8 7603
ab78acc6
IC
7604 carry = bytes[j] >> 8
7605 bytes[j] &= 0xff
7606 }
ebd8d4e8 7607
ab78acc6
IC
7608 while (carry) {
7609 bytes.push(carry & 0xff)
7610
7611 carry >>= 8
7612 }
ebd8d4e8
IC
7613 }
7614
ab78acc6
IC
7615 // deal with leading zeros
7616 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7617
ab78acc6 7618 return bytes.reverse()
ebd8d4e8
IC
7619}
7620
7621module.exports = {
7622 encode: encode,
7623 decode: decode
7624}
7625
ab78acc6 7626},{}],31:[function(require,module,exports){
ebd8d4e8 7627(function (Buffer){
ab78acc6
IC
7628'use strict'
7629
7630var base58 = require('bs58')
7631var createHash = require('create-hash')
7632
7633// SHA256(SHA256(buffer))
7634function sha256x2 (buffer) {
7635 buffer = createHash('sha256').update(buffer).digest()
7636 return createHash('sha256').update(buffer).digest()
7637}
7638
7639// Encode a buffer as a base58-check encoded string
7640function encode (payload) {
7641 var checksum = sha256x2(payload).slice(0, 4)
7642
7643 return base58.encode(Buffer.concat([
7644 payload,
7645 checksum
7646 ]))
7647}
7648
7649// Decode a base58-check encoded string to a buffer
7650function decode (string) {
7651 var buffer = new Buffer(base58.decode(string))
7652
7653 var payload = buffer.slice(0, -4)
7654 var checksum = buffer.slice(-4)
7655 var newChecksum = sha256x2(payload).slice(0, 4)
7656
7657 for (var i = 0; i < newChecksum.length; ++i) {
7658 if (newChecksum[i] === checksum[i]) continue
7659
7660 throw new Error('Invalid checksum')
ebd8d4e8 7661 }
ab78acc6
IC
7662
7663 return payload
ebd8d4e8
IC
7664}
7665
ab78acc6
IC
7666module.exports = {
7667 encode: encode,
7668 decode: decode
ebd8d4e8
IC
7669}
7670
ab78acc6
IC
7671}).call(this,require("buffer").Buffer)
7672},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7673(function (Buffer){
ab78acc6
IC
7674'use strict';
7675var inherits = require('inherits')
7676var md5 = require('./md5')
7677var rmd160 = require('ripemd160')
7678var sha = require('sha.js')
ebd8d4e8 7679
ab78acc6 7680var Transform = require('stream').Transform
ebd8d4e8 7681
ab78acc6
IC
7682function HashNoConstructor(hash) {
7683 Transform.call(this)
ebd8d4e8 7684
ab78acc6
IC
7685 this._hash = hash
7686 this.buffers = []
7687}
ebd8d4e8 7688
ab78acc6 7689inherits(HashNoConstructor, Transform)
ebd8d4e8 7690
ab78acc6
IC
7691HashNoConstructor.prototype._transform = function (data, _, next) {
7692 this.buffers.push(data)
ebd8d4e8 7693
ab78acc6
IC
7694 next()
7695}
ebd8d4e8 7696
ab78acc6
IC
7697HashNoConstructor.prototype._flush = function (next) {
7698 this.push(this.digest())
7699 next()
7700}
7701
7702HashNoConstructor.prototype.update = function (data, enc) {
7703 if (typeof data === 'string') {
7704 data = new Buffer(data, enc)
ebd8d4e8
IC
7705 }
7706
ab78acc6
IC
7707 this.buffers.push(data)
7708 return this
7709}
7710
7711HashNoConstructor.prototype.digest = function (enc) {
7712 var buf = Buffer.concat(this.buffers)
7713 var r = this._hash(buf)
7714 this.buffers = null
7715
7716 return enc ? r.toString(enc) : r
7717}
7718
7719function Hash(hash) {
7720 Transform.call(this)
7721
7722 this._hash = hash
7723}
7724
7725inherits(Hash, Transform)
7726
7727Hash.prototype._transform = function (data, enc, next) {
7728 if (enc) data = new Buffer(data, enc)
7729
7730 this._hash.update(data)
7731
7732 next()
ebd8d4e8
IC
7733}
7734
ab78acc6
IC
7735Hash.prototype._flush = function (next) {
7736 this.push(this._hash.digest())
7737 this._hash = null
7738
7739 next()
7740}
7741
7742Hash.prototype.update = function (data, enc) {
7743 if (typeof data === 'string') {
7744 data = new Buffer(data, enc)
7745 }
7746
7747 this._hash.update(data)
ebd8d4e8
IC
7748 return this
7749}
7750
ab78acc6
IC
7751Hash.prototype.digest = function (enc) {
7752 var outData = this._hash.digest()
7753
7754 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7755}
7756
ab78acc6
IC
7757module.exports = function createHash (alg) {
7758 if ('md5' === alg) return new HashNoConstructor(md5)
7759 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7760
7761 return new Hash(sha(alg))
7762}
ebd8d4e8 7763
ab78acc6
IC
7764}).call(this,require("buffer").Buffer)
7765},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 7766(function (Buffer){
ab78acc6 7767'use strict';
ebd8d4e8
IC
7768var intSize = 4;
7769var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7770var chrsz = 8;
7771
7772function toArray(buf, bigEndian) {
7773 if ((buf.length % intSize) !== 0) {
7774 var len = buf.length + (intSize - (buf.length % intSize));
7775 buf = Buffer.concat([buf, zeroBuffer], len);
7776 }
7777
7778 var arr = [];
7779 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7780 for (var i = 0; i < buf.length; i += intSize) {
7781 arr.push(fn.call(buf, i));
7782 }
7783 return arr;
7784}
7785
7786function toBuffer(arr, size, bigEndian) {
7787 var buf = new Buffer(size);
7788 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7789 for (var i = 0; i < arr.length; i++) {
7790 fn.call(buf, arr[i], i * 4, true);
7791 }
7792 return buf;
7793}
7794
7795function hash(buf, fn, hashSize, bigEndian) {
7796 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7797 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7798 return toBuffer(arr, hashSize, bigEndian);
7799}
ab78acc6
IC
7800exports.hash = hash;
7801}).call(this,require("buffer").Buffer)
7802},{"buffer":7}],34:[function(require,module,exports){
7803'use strict';
ebd8d4e8
IC
7804/*
7805 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7806 * Digest Algorithm, as defined in RFC 1321.
7807 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7808 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7809 * Distributed under the BSD License
7810 * See http://pajhome.org.uk/crypt/md5 for more info.
7811 */
7812
ab78acc6 7813var helpers = require('./helpers');
ebd8d4e8
IC
7814
7815/*
7816 * Calculate the MD5 of an array of little-endian words, and a bit length
7817 */
7818function core_md5(x, len)
7819{
7820 /* append padding */
7821 x[len >> 5] |= 0x80 << ((len) % 32);
7822 x[(((len + 64) >>> 9) << 4) + 14] = len;
7823
7824 var a = 1732584193;
7825 var b = -271733879;
7826 var c = -1732584194;
7827 var d = 271733878;
7828
7829 for(var i = 0; i < x.length; i += 16)
7830 {
7831 var olda = a;
7832 var oldb = b;
7833 var oldc = c;
7834 var oldd = d;
7835
7836 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7837 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7838 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7839 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7840 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7841 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7842 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7843 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7844 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7845 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7846 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7847 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7848 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7849 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7850 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7851 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7852
7853 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7854 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7855 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7856 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7857 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7858 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7859 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7860 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7861 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7862 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7863 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7864 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7865 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7866 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7867 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7868 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7869
7870 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7871 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7872 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7873 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7874 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7875 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7876 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7877 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7878 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7879 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7880 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7881 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7882 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7883 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7884 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7885 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7886
7887 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7888 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7889 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7890 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7891 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7892 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7893 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7894 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7895 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7896 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7897 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7898 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7899 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7900 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7901 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7902 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7903
7904 a = safe_add(a, olda);
7905 b = safe_add(b, oldb);
7906 c = safe_add(c, oldc);
7907 d = safe_add(d, oldd);
7908 }
7909 return Array(a, b, c, d);
7910
7911}
7912
7913/*
7914 * These functions implement the four basic operations the algorithm uses.
7915 */
7916function md5_cmn(q, a, b, x, s, t)
7917{
7918 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7919}
7920function md5_ff(a, b, c, d, x, s, t)
7921{
7922 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7923}
7924function md5_gg(a, b, c, d, x, s, t)
7925{
7926 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7927}
7928function md5_hh(a, b, c, d, x, s, t)
7929{
7930 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7931}
7932function md5_ii(a, b, c, d, x, s, t)
7933{
7934 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7935}
7936
7937/*
7938 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7939 * to work around bugs in some JS interpreters.
7940 */
7941function safe_add(x, y)
7942{
7943 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7944 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7945 return (msw << 16) | (lsw & 0xFFFF);
7946}
7947
7948/*
7949 * Bitwise rotate a 32-bit number to the left.
7950 */
7951function bit_rol(num, cnt)
7952{
7953 return (num << cnt) | (num >>> (32 - cnt));
7954}
7955
7956module.exports = function md5(buf) {
7957 return helpers.hash(buf, core_md5, 16);
7958};
ab78acc6
IC
7959},{"./helpers":33}],35:[function(require,module,exports){
7960arguments[4][12][0].apply(exports,arguments)
7961},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 7962(function (Buffer){
ebd8d4e8
IC
7963/*
7964CryptoJS v3.1.2
7965code.google.com/p/crypto-js
7966(c) 2009-2013 by Jeff Mott. All rights reserved.
7967code.google.com/p/crypto-js/wiki/License
7968*/
7969/** @preserve
7970(c) 2012 by Cédric Mesnil. All rights reserved.
7971
7972Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7973
7974 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7975 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
7976
7977THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7978*/
7979
ab78acc6 7980// constants table
ebd8d4e8 7981var zl = [
ab78acc6
IC
7982 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7983 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7984 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7985 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7986 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7987]
7988
ebd8d4e8 7989var zr = [
ab78acc6
IC
7990 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7991 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7992 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7993 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7994 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7995]
7996
ebd8d4e8 7997var sl = [
ab78acc6
IC
7998 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7999 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8000 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8001 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8002 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8003]
8004
ebd8d4e8 8005var sr = [
ab78acc6
IC
8006 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8007 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8008 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8009 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8010 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8011]
ebd8d4e8 8012
ab78acc6
IC
8013var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8014var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8015
ab78acc6
IC
8016function bytesToWords (bytes) {
8017 var words = []
ebd8d4e8 8018 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8019 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8020 }
ab78acc6
IC
8021 return words
8022}
ebd8d4e8 8023
ab78acc6
IC
8024function wordsToBytes (words) {
8025 var bytes = []
ebd8d4e8 8026 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8027 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8028 }
ab78acc6
IC
8029 return bytes
8030}
ebd8d4e8 8031
ab78acc6
IC
8032function processBlock (H, M, offset) {
8033 // swap endian
ebd8d4e8 8034 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8035 var offset_i = offset + i
8036 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8037
8038 // Swap
8039 M[offset_i] = (
ab78acc6
IC
8040 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8041 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8042 )
ebd8d4e8
IC
8043 }
8044
8045 // Working variables
ab78acc6
IC
8046 var al, bl, cl, dl, el
8047 var ar, br, cr, dr, er
8048
8049 ar = al = H[0]
8050 br = bl = H[1]
8051 cr = cl = H[2]
8052 dr = dl = H[3]
8053 er = el = H[4]
8054
8055 // computation
8056 var t
8057 for (i = 0; i < 80; i += 1) {
8058 t = (al + M[offset + zl[i]]) | 0
8059 if (i < 16) {
8060 t += f1(bl, cl, dl) + hl[0]
8061 } else if (i < 32) {
8062 t += f2(bl, cl, dl) + hl[1]
8063 } else if (i < 48) {
8064 t += f3(bl, cl, dl) + hl[2]
8065 } else if (i < 64) {
8066 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8067 } else {// if (i<80) {
ab78acc6
IC
8068 t += f5(bl, cl, dl) + hl[4]
8069 }
8070 t = t | 0
8071 t = rotl(t, sl[i])
8072 t = (t + el) | 0
8073 al = el
8074 el = dl
8075 dl = rotl(cl, 10)
8076 cl = bl
8077 bl = t
8078
8079 t = (ar + M[offset + zr[i]]) | 0
8080 if (i < 16) {
8081 t += f5(br, cr, dr) + hr[0]
8082 } else if (i < 32) {
8083 t += f4(br, cr, dr) + hr[1]
8084 } else if (i < 48) {
8085 t += f3(br, cr, dr) + hr[2]
8086 } else if (i < 64) {
8087 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8088 } else {// if (i<80) {
ab78acc6 8089 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8090 }
ebd8d4e8 8091
ab78acc6
IC
8092 t = t | 0
8093 t = rotl(t, sr[i])
8094 t = (t + er) | 0
8095 ar = er
8096 er = dr
8097 dr = rotl(cr, 10)
8098 cr = br
8099 br = t
8100 }
8101
8102 // intermediate hash value
8103 t = (H[1] + cl + dr) | 0
8104 H[1] = (H[2] + dl + er) | 0
8105 H[2] = (H[3] + el + ar) | 0
8106 H[3] = (H[4] + al + br) | 0
8107 H[4] = (H[0] + bl + cr) | 0
8108 H[0] = t
ebd8d4e8
IC
8109}
8110
ab78acc6
IC
8111function f1 (x, y, z) {
8112 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8113}
8114
ab78acc6
IC
8115function f2 (x, y, z) {
8116 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8117}
8118
ab78acc6
IC
8119function f3 (x, y, z) {
8120 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8121}
8122
ab78acc6
IC
8123function f4 (x, y, z) {
8124 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8125}
8126
ab78acc6
IC
8127function f5 (x, y, z) {
8128 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8129}
8130
ab78acc6
IC
8131function rotl (x, n) {
8132 return (x << n) | (x >>> (32 - n))
8133}
8134
8135function ripemd160 (message) {
8136 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8137
ab78acc6
IC
8138 if (typeof message === 'string') {
8139 message = new Buffer(message, 'utf8')
8140 }
ebd8d4e8 8141
ab78acc6 8142 var m = bytesToWords(message)
ebd8d4e8 8143
ab78acc6
IC
8144 var nBitsLeft = message.length * 8
8145 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8146
8147 // Add padding
ab78acc6 8148 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8149 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8150 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8151 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8152 )
ebd8d4e8 8153
ab78acc6
IC
8154 for (var i = 0; i < m.length; i += 16) {
8155 processBlock(H, m, i)
ebd8d4e8
IC
8156 }
8157
ab78acc6
IC
8158 // swap endian
8159 for (i = 0; i < 5; i++) {
8160 // shortcut
8161 var H_i = H[i]
ebd8d4e8
IC
8162
8163 // Swap
ab78acc6
IC
8164 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8165 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8166 }
8167
ab78acc6
IC
8168 var digestbytes = wordsToBytes(H)
8169 return new Buffer(digestbytes)
ebd8d4e8
IC
8170}
8171
ab78acc6
IC
8172module.exports = ripemd160
8173
8174}).call(this,require("buffer").Buffer)
8175},{"buffer":7}],37:[function(require,module,exports){
8176(function (Buffer){
8177// prototype class for hash functions
8178function Hash (blockSize, finalSize) {
8179 this._block = new Buffer(blockSize)
8180 this._finalSize = finalSize
8181 this._blockSize = blockSize
8182 this._len = 0
8183 this._s = 0
8184}
ebd8d4e8 8185
ab78acc6
IC
8186Hash.prototype.update = function (data, enc) {
8187 if (typeof data === 'string') {
8188 enc = enc || 'utf8'
8189 data = new Buffer(data, enc)
8190 }
ebd8d4e8 8191
ab78acc6
IC
8192 var l = this._len += data.length
8193 var s = this._s || 0
8194 var f = 0
8195 var buffer = this._block
ebd8d4e8 8196
ab78acc6
IC
8197 while (s < l) {
8198 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8199 var ch = (t - f)
ebd8d4e8 8200
ab78acc6
IC
8201 for (var i = 0; i < ch; i++) {
8202 buffer[(s % this._blockSize) + i] = data[i + f]
8203 }
8204
8205 s += ch
8206 f += ch
ebd8d4e8 8207
ab78acc6
IC
8208 if ((s % this._blockSize) === 0) {
8209 this._update(buffer)
8210 }
ebd8d4e8 8211 }
ab78acc6
IC
8212 this._s = s
8213
8214 return this
8215}
ebd8d4e8 8216
ab78acc6
IC
8217Hash.prototype.digest = function (enc) {
8218 // Suppose the length of the message M, in bits, is l
8219 var l = this._len * 8
8220
8221 // Append the bit 1 to the end of the message
8222 this._block[this._len % this._blockSize] = 0x80
8223
8224 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8225 this._block.fill(0, this._len % this._blockSize + 1)
8226
8227 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8228 this._update(this._block)
8229 this._block.fill(0)
ebd8d4e8
IC
8230 }
8231
ab78acc6
IC
8232 // to this append the block which is equal to the number l written in binary
8233 // TODO: handle case where l is > Math.pow(2, 29)
8234 this._block.writeInt32BE(l, this._blockSize - 4)
8235
8236 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8237
ab78acc6
IC
8238 return enc ? hash.toString(enc) : hash
8239}
ebd8d4e8 8240
ab78acc6
IC
8241Hash.prototype._update = function () {
8242 throw new Error('_update must be implemented by subclass')
8243}
ebd8d4e8 8244
ab78acc6 8245module.exports = Hash
ebd8d4e8 8246
ab78acc6
IC
8247}).call(this,require("buffer").Buffer)
8248},{"buffer":7}],38:[function(require,module,exports){
8249var exports = module.exports = function SHA (algorithm) {
8250 algorithm = algorithm.toLowerCase()
ebd8d4e8 8251
ab78acc6
IC
8252 var Algorithm = exports[algorithm]
8253 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8254
ab78acc6
IC
8255 return new Algorithm()
8256}
8257
8258exports.sha = require('./sha')
8259exports.sha1 = require('./sha1')
8260exports.sha224 = require('./sha224')
8261exports.sha256 = require('./sha256')
8262exports.sha384 = require('./sha384')
8263exports.sha512 = require('./sha512')
8264
8265},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8266(function (Buffer){
8267/*
8268 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8269 * in FIPS PUB 180-1
8270 * This source code is derived from sha1.js of the same repository.
8271 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8272 * operation was added.
8273 */
ebd8d4e8 8274
ab78acc6
IC
8275var inherits = require('inherits')
8276var Hash = require('./hash')
ebd8d4e8 8277
ab78acc6 8278var W = new Array(80)
ebd8d4e8 8279
ab78acc6
IC
8280function Sha () {
8281 this.init()
8282 this._w = W
ebd8d4e8 8283
ab78acc6
IC
8284 Hash.call(this, 64, 56)
8285}
ebd8d4e8 8286
ab78acc6 8287inherits(Sha, Hash)
ebd8d4e8 8288
ab78acc6
IC
8289Sha.prototype.init = function () {
8290 this._a = 0x67452301 | 0
8291 this._b = 0xefcdab89 | 0
8292 this._c = 0x98badcfe | 0
8293 this._d = 0x10325476 | 0
8294 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8295
ab78acc6
IC
8296 return this
8297}
8298
8299/*
8300 * Bitwise rotate a 32-bit number to the left.
8301 */
8302function rol (num, cnt) {
8303 return (num << cnt) | (num >>> (32 - cnt))
8304}
8305
8306Sha.prototype._update = function (M) {
8307 var W = this._w
8308
8309 var a = this._a
8310 var b = this._b
8311 var c = this._c
8312 var d = this._d
8313 var e = this._e
ebd8d4e8 8314
ab78acc6
IC
8315 var j = 0, k
8316
8317 /*
8318 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8319 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8320 */
8321 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8322 function loop (w, f) {
8323 W[j] = w
8324
8325 var t = rol(a, 5) + f + e + w + k
8326
8327 e = d
8328 d = c
8329 c = rol(b, 30)
8330 b = a
8331 a = t
8332 j++
ebd8d4e8
IC
8333 }
8334
ab78acc6
IC
8335 k = 1518500249
8336 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8337 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8338 k = 1859775393
8339 while (j < 40) loop(calcW(), b ^ c ^ d)
8340 k = -1894007588
8341 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8342 k = -899497514
8343 while (j < 80) loop(calcW(), b ^ c ^ d)
8344
8345 this._a = (a + this._a) | 0
8346 this._b = (b + this._b) | 0
8347 this._c = (c + this._c) | 0
8348 this._d = (d + this._d) | 0
8349 this._e = (e + this._e) | 0
ebd8d4e8
IC
8350}
8351
ab78acc6
IC
8352Sha.prototype._hash = function () {
8353 var H = new Buffer(20)
8354
8355 H.writeInt32BE(this._a | 0, 0)
8356 H.writeInt32BE(this._b | 0, 4)
8357 H.writeInt32BE(this._c | 0, 8)
8358 H.writeInt32BE(this._d | 0, 12)
8359 H.writeInt32BE(this._e | 0, 16)
8360
8361 return H
ebd8d4e8
IC
8362}
8363
ab78acc6 8364module.exports = Sha
ebd8d4e8 8365
ebd8d4e8 8366
ab78acc6
IC
8367}).call(this,require("buffer").Buffer)
8368},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8369(function (Buffer){
ebd8d4e8
IC
8370/*
8371 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8372 * in FIPS PUB 180-1
8373 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8374 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8375 * Distributed under the BSD License
8376 * See http://pajhome.org.uk/crypt/md5 for details.
8377 */
ebd8d4e8 8378
ab78acc6
IC
8379var inherits = require('inherits')
8380var Hash = require('./hash')
ebd8d4e8 8381
ab78acc6 8382var W = new Array(80)
ebd8d4e8 8383
ab78acc6
IC
8384function Sha1 () {
8385 this.init()
8386 this._w = W
ebd8d4e8 8387
ab78acc6
IC
8388 Hash.call(this, 64, 56)
8389}
ebd8d4e8 8390
ab78acc6 8391inherits(Sha1, Hash)
ebd8d4e8 8392
ab78acc6
IC
8393Sha1.prototype.init = function () {
8394 this._a = 0x67452301 | 0
8395 this._b = 0xefcdab89 | 0
8396 this._c = 0x98badcfe | 0
8397 this._d = 0x10325476 | 0
8398 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8399
ab78acc6
IC
8400 return this
8401}
ebd8d4e8 8402
ab78acc6
IC
8403/*
8404 * Bitwise rotate a 32-bit number to the left.
8405 */
8406function rol (num, cnt) {
8407 return (num << cnt) | (num >>> (32 - cnt))
8408}
ebd8d4e8 8409
ab78acc6
IC
8410Sha1.prototype._update = function (M) {
8411 var W = this._w
ebd8d4e8 8412
ab78acc6
IC
8413 var a = this._a
8414 var b = this._b
8415 var c = this._c
8416 var d = this._d
8417 var e = this._e
ebd8d4e8 8418
ab78acc6 8419 var j = 0, k
ebd8d4e8 8420
ab78acc6
IC
8421 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8422 function loop (w, f) {
8423 W[j] = w
ebd8d4e8 8424
ab78acc6 8425 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8426
ab78acc6
IC
8427 e = d
8428 d = c
8429 c = rol(b, 30)
8430 b = a
8431 a = t
8432 j++
ebd8d4e8
IC
8433 }
8434
ab78acc6
IC
8435 k = 1518500249
8436 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8437 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8438 k = 1859775393
8439 while (j < 40) loop(calcW(), b ^ c ^ d)
8440 k = -1894007588
8441 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8442 k = -899497514
8443 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8444
ab78acc6
IC
8445 this._a = (a + this._a) | 0
8446 this._b = (b + this._b) | 0
8447 this._c = (c + this._c) | 0
8448 this._d = (d + this._d) | 0
8449 this._e = (e + this._e) | 0
8450}
ebd8d4e8 8451
ab78acc6
IC
8452Sha1.prototype._hash = function () {
8453 var H = new Buffer(20)
ebd8d4e8 8454
ab78acc6
IC
8455 H.writeInt32BE(this._a | 0, 0)
8456 H.writeInt32BE(this._b | 0, 4)
8457 H.writeInt32BE(this._c | 0, 8)
8458 H.writeInt32BE(this._d | 0, 12)
8459 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8460
ab78acc6
IC
8461 return H
8462}
ebd8d4e8 8463
ab78acc6 8464module.exports = Sha1
ebd8d4e8 8465
ab78acc6
IC
8466}).call(this,require("buffer").Buffer)
8467},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8468(function (Buffer){
8469/**
8470 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8471 * in FIPS 180-2
8472 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8473 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8474 *
8475 */
ebd8d4e8 8476
ab78acc6
IC
8477var inherits = require('inherits')
8478var Sha256 = require('./sha256')
8479var Hash = require('./hash')
ebd8d4e8 8480
ab78acc6 8481var W = new Array(64)
ebd8d4e8 8482
ab78acc6
IC
8483function Sha224 () {
8484 this.init()
ebd8d4e8 8485
ab78acc6 8486 this._w = W // new Array(64)
ebd8d4e8 8487
ab78acc6
IC
8488 Hash.call(this, 64, 56)
8489}
ebd8d4e8 8490
ab78acc6 8491inherits(Sha224, Sha256)
ebd8d4e8 8492
ab78acc6
IC
8493Sha224.prototype.init = function () {
8494 this._a = 0xc1059ed8 | 0
8495 this._b = 0x367cd507 | 0
8496 this._c = 0x3070dd17 | 0
8497 this._d = 0xf70e5939 | 0
8498 this._e = 0xffc00b31 | 0
8499 this._f = 0x68581511 | 0
8500 this._g = 0x64f98fa7 | 0
8501 this._h = 0xbefa4fa4 | 0
8502
8503 return this
8504}
8505
8506Sha224.prototype._hash = function () {
8507 var H = new Buffer(28)
8508
8509 H.writeInt32BE(this._a, 0)
8510 H.writeInt32BE(this._b, 4)
8511 H.writeInt32BE(this._c, 8)
8512 H.writeInt32BE(this._d, 12)
8513 H.writeInt32BE(this._e, 16)
8514 H.writeInt32BE(this._f, 20)
8515 H.writeInt32BE(this._g, 24)
8516
8517 return H
ebd8d4e8
IC
8518}
8519
ab78acc6 8520module.exports = Sha224
ebd8d4e8 8521
ab78acc6
IC
8522}).call(this,require("buffer").Buffer)
8523},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8524(function (Buffer){
ebd8d4e8
IC
8525/**
8526 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8527 * in FIPS 180-2
8528 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8529 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8530 *
8531 */
8532
ab78acc6
IC
8533var inherits = require('inherits')
8534var Hash = require('./hash')
8535
8536var K = [
8537 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8538 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8539 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8540 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8541 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8542 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8543 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8544 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8545 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8546 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8547 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8548 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8549 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8550 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8551 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8552 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8553]
8554
8555var W = new Array(64)
8556
8557function Sha256 () {
8558 this.init()
8559
8560 this._w = W // new Array(64)
8561
8562 Hash.call(this, 64, 56)
8563}
8564
8565inherits(Sha256, Hash)
8566
8567Sha256.prototype.init = function () {
8568 this._a = 0x6a09e667 | 0
8569 this._b = 0xbb67ae85 | 0
8570 this._c = 0x3c6ef372 | 0
8571 this._d = 0xa54ff53a | 0
8572 this._e = 0x510e527f | 0
8573 this._f = 0x9b05688c | 0
8574 this._g = 0x1f83d9ab | 0
8575 this._h = 0x5be0cd19 | 0
ebd8d4e8 8576
ab78acc6
IC
8577 return this
8578}
ebd8d4e8 8579
ab78acc6
IC
8580function S (X, n) {
8581 return (X >>> n) | (X << (32 - n))
8582}
ebd8d4e8 8583
ab78acc6
IC
8584function R (X, n) {
8585 return (X >>> n)
8586}
ebd8d4e8 8587
ab78acc6
IC
8588function Ch (x, y, z) {
8589 return ((x & y) ^ ((~x) & z))
8590}
ebd8d4e8 8591
ab78acc6
IC
8592function Maj (x, y, z) {
8593 return ((x & y) ^ (x & z) ^ (y & z))
8594}
ebd8d4e8 8595
ab78acc6
IC
8596function Sigma0256 (x) {
8597 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8598}
ebd8d4e8 8599
ab78acc6
IC
8600function Sigma1256 (x) {
8601 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8602}
ebd8d4e8 8603
ab78acc6
IC
8604function Gamma0256 (x) {
8605 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8606}
ebd8d4e8 8607
ab78acc6
IC
8608function Gamma1256 (x) {
8609 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8610}
ebd8d4e8 8611
ab78acc6
IC
8612Sha256.prototype._update = function (M) {
8613 var W = this._w
ebd8d4e8 8614
ab78acc6
IC
8615 var a = this._a | 0
8616 var b = this._b | 0
8617 var c = this._c | 0
8618 var d = this._d | 0
8619 var e = this._e | 0
8620 var f = this._f | 0
8621 var g = this._g | 0
8622 var h = this._h | 0
ebd8d4e8 8623
ab78acc6 8624 var j = 0
ebd8d4e8 8625
ab78acc6
IC
8626 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8627 function loop (w) {
8628 W[j] = w
ebd8d4e8 8629
ab78acc6
IC
8630 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8631 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8632
ab78acc6
IC
8633 h = g
8634 g = f
8635 f = e
8636 e = d + T1
8637 d = c
8638 c = b
8639 b = a
8640 a = T1 + T2
ebd8d4e8 8641
ab78acc6 8642 j++
ebd8d4e8
IC
8643 }
8644
ab78acc6
IC
8645 while (j < 16) loop(M.readInt32BE(j * 4))
8646 while (j < 64) loop(calcW())
ebd8d4e8 8647
ab78acc6
IC
8648 this._a = (a + this._a) | 0
8649 this._b = (b + this._b) | 0
8650 this._c = (c + this._c) | 0
8651 this._d = (d + this._d) | 0
8652 this._e = (e + this._e) | 0
8653 this._f = (f + this._f) | 0
8654 this._g = (g + this._g) | 0
8655 this._h = (h + this._h) | 0
8656}
ebd8d4e8 8657
ab78acc6
IC
8658Sha256.prototype._hash = function () {
8659 var H = new Buffer(32)
ebd8d4e8 8660
ab78acc6
IC
8661 H.writeInt32BE(this._a, 0)
8662 H.writeInt32BE(this._b, 4)
8663 H.writeInt32BE(this._c, 8)
8664 H.writeInt32BE(this._d, 12)
8665 H.writeInt32BE(this._e, 16)
8666 H.writeInt32BE(this._f, 20)
8667 H.writeInt32BE(this._g, 24)
8668 H.writeInt32BE(this._h, 28)
ebd8d4e8 8669
ab78acc6
IC
8670 return H
8671}
ebd8d4e8 8672
ab78acc6 8673module.exports = Sha256
ebd8d4e8 8674
ab78acc6
IC
8675}).call(this,require("buffer").Buffer)
8676},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8677(function (Buffer){
8678var inherits = require('inherits')
8679var SHA512 = require('./sha512')
8680var Hash = require('./hash')
ebd8d4e8 8681
ab78acc6 8682var W = new Array(160)
ebd8d4e8 8683
ab78acc6
IC
8684function Sha384 () {
8685 this.init()
8686 this._w = W
ebd8d4e8 8687
ab78acc6
IC
8688 Hash.call(this, 128, 112)
8689}
ebd8d4e8 8690
ab78acc6 8691inherits(Sha384, SHA512)
ebd8d4e8 8692
ab78acc6
IC
8693Sha384.prototype.init = function () {
8694 this._a = 0xcbbb9d5d | 0
8695 this._b = 0x629a292a | 0
8696 this._c = 0x9159015a | 0
8697 this._d = 0x152fecd8 | 0
8698 this._e = 0x67332667 | 0
8699 this._f = 0x8eb44a87 | 0
8700 this._g = 0xdb0c2e0d | 0
8701 this._h = 0x47b5481d | 0
ebd8d4e8 8702
ab78acc6
IC
8703 this._al = 0xc1059ed8 | 0
8704 this._bl = 0x367cd507 | 0
8705 this._cl = 0x3070dd17 | 0
8706 this._dl = 0xf70e5939 | 0
8707 this._el = 0xffc00b31 | 0
8708 this._fl = 0x68581511 | 0
8709 this._gl = 0x64f98fa7 | 0
8710 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8711
ab78acc6 8712 return this
ebd8d4e8
IC
8713}
8714
ab78acc6
IC
8715Sha384.prototype._hash = function () {
8716 var H = new Buffer(48)
ebd8d4e8 8717
ab78acc6
IC
8718 function writeInt64BE (h, l, offset) {
8719 H.writeInt32BE(h, offset)
8720 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8721 }
ebd8d4e8 8722
ab78acc6
IC
8723 writeInt64BE(this._a, this._al, 0)
8724 writeInt64BE(this._b, this._bl, 8)
8725 writeInt64BE(this._c, this._cl, 16)
8726 writeInt64BE(this._d, this._dl, 24)
8727 writeInt64BE(this._e, this._el, 32)
8728 writeInt64BE(this._f, this._fl, 40)
8729
8730 return H
ebd8d4e8
IC
8731}
8732
ab78acc6 8733module.exports = Sha384
ebd8d4e8 8734
ab78acc6
IC
8735}).call(this,require("buffer").Buffer)
8736},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8737(function (Buffer){
ab78acc6
IC
8738var inherits = require('inherits')
8739var Hash = require('./hash')
8740
8741var K = [
8742 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8743 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8744 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8745 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8746 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8747 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8748 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8749 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8750 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8751 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8752 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8753 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8754 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8755 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8756 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8757 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8758 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8759 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8760 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8761 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8762 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8763 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8764 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8765 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8766 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8767 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8768 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8769 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8770 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8771 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8772 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8773 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8774 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8775 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8776 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8777 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8778 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8779 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8780 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8781 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8782]
8783
8784var W = new Array(160)
8785
8786function Sha512 () {
8787 this.init()
8788 this._w = W
8789
8790 Hash.call(this, 128, 112)
8791}
8792
8793inherits(Sha512, Hash)
8794
8795Sha512.prototype.init = function () {
8796 this._a = 0x6a09e667 | 0
8797 this._b = 0xbb67ae85 | 0
8798 this._c = 0x3c6ef372 | 0
8799 this._d = 0xa54ff53a | 0
8800 this._e = 0x510e527f | 0
8801 this._f = 0x9b05688c | 0
8802 this._g = 0x1f83d9ab | 0
8803 this._h = 0x5be0cd19 | 0
8804
8805 this._al = 0xf3bcc908 | 0
8806 this._bl = 0x84caa73b | 0
8807 this._cl = 0xfe94f82b | 0
8808 this._dl = 0x5f1d36f1 | 0
8809 this._el = 0xade682d1 | 0
8810 this._fl = 0x2b3e6c1f | 0
8811 this._gl = 0xfb41bd6b | 0
8812 this._hl = 0x137e2179 | 0
ebd8d4e8 8813
ab78acc6 8814 return this
ebd8d4e8
IC
8815}
8816
ab78acc6
IC
8817function S (X, Xl, n) {
8818 return (X >>> n) | (Xl << (32 - n))
8819}
8820
8821function Ch (x, y, z) {
8822 return ((x & y) ^ ((~x) & z))
8823}
8824
8825function Maj (x, y, z) {
8826 return ((x & y) ^ (x & z) ^ (y & z))
8827}
8828
8829Sha512.prototype._update = function (M) {
8830 var W = this._w
8831
8832 var a = this._a | 0
8833 var b = this._b | 0
8834 var c = this._c | 0
8835 var d = this._d | 0
8836 var e = this._e | 0
8837 var f = this._f | 0
8838 var g = this._g | 0
8839 var h = this._h | 0
8840
8841 var al = this._al | 0
8842 var bl = this._bl | 0
8843 var cl = this._cl | 0
8844 var dl = this._dl | 0
8845 var el = this._el | 0
8846 var fl = this._fl | 0
8847 var gl = this._gl | 0
8848 var hl = this._hl | 0
8849
8850 var i = 0, j = 0
8851 var Wi, Wil
8852 function calcW () {
8853 var x = W[j - 15 * 2]
8854 var xl = W[j - 15 * 2 + 1]
8855 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8856 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8857
8858 x = W[j - 2 * 2]
8859 xl = W[j - 2 * 2 + 1]
8860 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8861 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8862
8863 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8864 var Wi7 = W[j - 7 * 2]
8865 var Wi7l = W[j - 7 * 2 + 1]
8866
8867 var Wi16 = W[j - 16 * 2]
8868 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 8869
ab78acc6
IC
8870 Wil = gamma0l + Wi7l
8871 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8872 Wil = Wil + gamma1l
8873 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8874 Wil = Wil + Wi16l
8875 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8876 }
8877
8878 function loop () {
8879 W[j] = Wi
8880 W[j + 1] = Wil
ebd8d4e8 8881
ab78acc6
IC
8882 var maj = Maj(a, b, c)
8883 var majl = Maj(al, bl, cl)
ebd8d4e8 8884
ab78acc6
IC
8885 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8886 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8887 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8888 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 8889
ab78acc6
IC
8890 // t1 = h + sigma1 + ch + K[i] + W[i]
8891 var Ki = K[j]
8892 var Kil = K[j + 1]
ebd8d4e8 8893
ab78acc6
IC
8894 var ch = Ch(e, f, g)
8895 var chl = Ch(el, fl, gl)
ebd8d4e8 8896
ab78acc6
IC
8897 var t1l = hl + sigma1l
8898 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8899 t1l = t1l + chl
8900 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8901 t1l = t1l + Kil
8902 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8903 t1l = t1l + Wil
8904 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 8905
ab78acc6
IC
8906 // t2 = sigma0 + maj
8907 var t2l = sigma0l + majl
8908 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 8909
ab78acc6
IC
8910 h = g
8911 hl = gl
8912 g = f
8913 gl = fl
8914 f = e
8915 fl = el
8916 el = (dl + t1l) | 0
8917 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8918 d = c
8919 dl = cl
8920 c = b
8921 cl = bl
8922 b = a
8923 bl = al
8924 al = (t1l + t2l) | 0
8925 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8926
8927 i++
8928 j += 2
8929 }
8930
8931 while (i < 16) {
8932 Wi = M.readInt32BE(j * 4)
8933 Wil = M.readInt32BE(j * 4 + 4)
8934
8935 loop()
8936 }
8937
8938 while (i < 80) {
8939 calcW()
8940 loop()
8941 }
8942
8943 this._al = (this._al + al) | 0
8944 this._bl = (this._bl + bl) | 0
8945 this._cl = (this._cl + cl) | 0
8946 this._dl = (this._dl + dl) | 0
8947 this._el = (this._el + el) | 0
8948 this._fl = (this._fl + fl) | 0
8949 this._gl = (this._gl + gl) | 0
8950 this._hl = (this._hl + hl) | 0
8951
8952 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8953 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8954 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8955 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8956 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8957 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8958 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8959 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8960}
8961
8962Sha512.prototype._hash = function () {
8963 var H = new Buffer(64)
8964
8965 function writeInt64BE (h, l, offset) {
8966 H.writeInt32BE(h, offset)
8967 H.writeInt32BE(l, offset + 4)
8968 }
8969
8970 writeInt64BE(this._a, this._al, 0)
8971 writeInt64BE(this._b, this._bl, 8)
8972 writeInt64BE(this._c, this._cl, 16)
8973 writeInt64BE(this._d, this._dl, 24)
8974 writeInt64BE(this._e, this._el, 32)
8975 writeInt64BE(this._f, this._fl, 40)
8976 writeInt64BE(this._g, this._gl, 48)
8977 writeInt64BE(this._h, this._hl, 56)
8978
8979 return H
8980}
8981
8982module.exports = Sha512
8983
8984}).call(this,require("buffer").Buffer)
8985},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8986(function (Buffer){
8987'use strict';
8988var createHash = require('create-hash/browser');
8989var inherits = require('inherits')
ebd8d4e8 8990
ab78acc6 8991var Transform = require('stream').Transform
ebd8d4e8 8992
ab78acc6
IC
8993var ZEROS = new Buffer(128)
8994ZEROS.fill(0)
ebd8d4e8 8995
ab78acc6
IC
8996function Hmac(alg, key) {
8997 Transform.call(this)
ebd8d4e8 8998
ab78acc6
IC
8999 if (typeof key === 'string') {
9000 key = new Buffer(key)
9001 }
ebd8d4e8 9002
ab78acc6 9003 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9004
ab78acc6
IC
9005 this._alg = alg
9006 this._key = key
ebd8d4e8 9007
ab78acc6
IC
9008 if (key.length > blocksize) {
9009 key = createHash(alg).update(key).digest()
ebd8d4e8 9010
ab78acc6
IC
9011 } else if (key.length < blocksize) {
9012 key = Buffer.concat([key, ZEROS], blocksize)
9013 }
ebd8d4e8 9014
ab78acc6
IC
9015 var ipad = this._ipad = new Buffer(blocksize)
9016 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9017
ab78acc6
IC
9018 for (var i = 0; i < blocksize; i++) {
9019 ipad[i] = key[i] ^ 0x36
9020 opad[i] = key[i] ^ 0x5C
9021 }
ebd8d4e8 9022
ab78acc6
IC
9023 this._hash = createHash(alg).update(ipad)
9024}
ebd8d4e8 9025
ab78acc6 9026inherits(Hmac, Transform)
ebd8d4e8 9027
ab78acc6
IC
9028Hmac.prototype.update = function (data, enc) {
9029 this._hash.update(data, enc)
ebd8d4e8 9030
ab78acc6
IC
9031 return this
9032}
ebd8d4e8 9033
ab78acc6
IC
9034Hmac.prototype._transform = function (data, _, next) {
9035 this._hash.update(data)
ebd8d4e8 9036
ab78acc6
IC
9037 next()
9038}
ebd8d4e8 9039
ab78acc6
IC
9040Hmac.prototype._flush = function (next) {
9041 this.push(this.digest())
ebd8d4e8 9042
ab78acc6
IC
9043 next()
9044}
ebd8d4e8 9045
ab78acc6
IC
9046Hmac.prototype.digest = function (enc) {
9047 var h = this._hash.digest()
ebd8d4e8 9048
ab78acc6
IC
9049 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9050}
ebd8d4e8 9051
ab78acc6
IC
9052module.exports = function createHmac(alg, key) {
9053 return new Hmac(alg, key)
9054}
ebd8d4e8 9055
ab78acc6
IC
9056}).call(this,require("buffer").Buffer)
9057},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9058arguments[4][12][0].apply(exports,arguments)
9059},{"dup":12}],47:[function(require,module,exports){
9060var assert = require('assert')
9061var BigInteger = require('bigi')
ebd8d4e8 9062
ab78acc6 9063var Point = require('./point')
ebd8d4e8
IC
9064
9065function Curve(p, a, b, Gx, Gy, n, h) {
9066 this.p = p
9067 this.a = a
9068 this.b = b
9069 this.G = Point.fromAffine(this, Gx, Gy)
9070 this.n = n
9071 this.h = h
9072
9073 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9074
9075 // result caching
9076 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9077}
9078
9079Curve.prototype.pointFromX = function(isOdd, x) {
9080 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9081 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9082
9083 var y = beta
9084 if (beta.isEven() ^ !isOdd) {
9085 y = this.p.subtract(y) // -y % p
9086 }
9087
9088 return Point.fromAffine(this, x, y)
9089}
9090
9091Curve.prototype.isInfinity = function(Q) {
9092 if (Q === this.infinity) return true
9093
9094 return Q.z.signum() === 0 && Q.y.signum() !== 0
9095}
9096
9097Curve.prototype.isOnCurve = function(Q) {
9098 if (this.isInfinity(Q)) return true
9099
9100 var x = Q.affineX
9101 var y = Q.affineY
9102 var a = this.a
9103 var b = this.b
9104 var p = this.p
9105
9106 // Check that xQ and yQ are integers in the interval [0, p - 1]
9107 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9108 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9109
9110 // and check that y^2 = x^3 + ax + b (mod p)
9111 var lhs = y.square().mod(p)
9112 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9113 return lhs.equals(rhs)
9114}
9115
9116/**
9117 * Validate an elliptic curve point.
9118 *
9119 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9120 */
9121Curve.prototype.validate = function(Q) {
9122 // Check Q != O
9123 assert(!this.isInfinity(Q), 'Point is at infinity')
9124 assert(this.isOnCurve(Q), 'Point is not on the curve')
9125
9126 // Check nQ = O (where Q is a scalar multiple of G)
9127 var nQ = Q.multiply(this.n)
9128 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9129
9130 return true
9131}
9132
9133module.exports = Curve
9134
ab78acc6 9135},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9136module.exports={
9137 "secp128r1": {
9138 "p": "fffffffdffffffffffffffffffffffff",
9139 "a": "fffffffdfffffffffffffffffffffffc",
9140 "b": "e87579c11079f43dd824993c2cee5ed3",
9141 "n": "fffffffe0000000075a30d1b9038a115",
9142 "h": "01",
9143 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9144 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9145 },
9146 "secp160k1": {
9147 "p": "fffffffffffffffffffffffffffffffeffffac73",
9148 "a": "00",
9149 "b": "07",
9150 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9151 "h": "01",
9152 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9153 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9154 },
9155 "secp160r1": {
9156 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9157 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9158 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9159 "n": "0100000000000000000001f4c8f927aed3ca752257",
9160 "h": "01",
9161 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9162 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9163 },
9164 "secp192k1": {
9165 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9166 "a": "00",
9167 "b": "03",
9168 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9169 "h": "01",
9170 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9171 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9172 },
9173 "secp192r1": {
9174 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9175 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9176 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9177 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9178 "h": "01",
9179 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9180 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9181 },
ebd8d4e8
IC
9182 "secp256k1": {
9183 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9184 "a": "00",
9185 "b": "07",
9186 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9187 "h": "01",
9188 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9189 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9190 },
9191 "secp256r1": {
9192 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9193 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9194 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9195 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9196 "h": "01",
9197 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9198 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9199 }
9200}
9201
ab78acc6
IC
9202},{}],49:[function(require,module,exports){
9203var Point = require('./point')
9204var Curve = require('./curve')
ebd8d4e8 9205
ab78acc6 9206var getCurveByName = require('./names')
ebd8d4e8
IC
9207
9208module.exports = {
9209 Curve: Curve,
9210 Point: Point,
9211 getCurveByName: getCurveByName
9212}
9213
ab78acc6
IC
9214},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9215var BigInteger = require('bigi')
ebd8d4e8 9216
ab78acc6
IC
9217var curves = require('./curves')
9218var Curve = require('./curve')
ebd8d4e8
IC
9219
9220function getCurveByName(name) {
9221 var curve = curves[name]
9222 if (!curve) return null
9223
9224 var p = new BigInteger(curve.p, 16)
9225 var a = new BigInteger(curve.a, 16)
9226 var b = new BigInteger(curve.b, 16)
9227 var n = new BigInteger(curve.n, 16)
9228 var h = new BigInteger(curve.h, 16)
9229 var Gx = new BigInteger(curve.Gx, 16)
9230 var Gy = new BigInteger(curve.Gy, 16)
9231
9232 return new Curve(p, a, b, Gx, Gy, n, h)
9233}
9234
9235module.exports = getCurveByName
9236
ab78acc6 9237},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9238(function (Buffer){
ab78acc6
IC
9239var assert = require('assert')
9240var BigInteger = require('bigi')
ebd8d4e8
IC
9241
9242var THREE = BigInteger.valueOf(3)
9243
9244function Point(curve, x, y, z) {
9245 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9246
9247 this.curve = curve
9248 this.x = x
9249 this.y = y
9250 this.z = z
9251 this._zInv = null
9252
9253 this.compressed = true
9254}
9255
9256Object.defineProperty(Point.prototype, 'zInv', {
9257 get: function() {
9258 if (this._zInv === null) {
9259 this._zInv = this.z.modInverse(this.curve.p)
9260 }
9261
9262 return this._zInv
9263 }
9264})
9265
9266Object.defineProperty(Point.prototype, 'affineX', {
9267 get: function() {
9268 return this.x.multiply(this.zInv).mod(this.curve.p)
9269 }
9270})
9271
9272Object.defineProperty(Point.prototype, 'affineY', {
9273 get: function() {
9274 return this.y.multiply(this.zInv).mod(this.curve.p)
9275 }
9276})
9277
9278Point.fromAffine = function(curve, x, y) {
9279 return new Point(curve, x, y, BigInteger.ONE)
9280}
9281
9282Point.prototype.equals = function(other) {
9283 if (other === this) return true
9284 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9285 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9286
9287 // u = Y2 * Z1 - Y1 * Z2
9288 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9289
9290 if (u.signum() !== 0) return false
9291
9292 // v = X2 * Z1 - X1 * Z2
9293 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9294
9295 return v.signum() === 0
9296}
9297
9298Point.prototype.negate = function() {
9299 var y = this.curve.p.subtract(this.y)
9300
9301 return new Point(this.curve, this.x, y, this.z)
9302}
9303
9304Point.prototype.add = function(b) {
9305 if (this.curve.isInfinity(this)) return b
9306 if (this.curve.isInfinity(b)) return this
9307
9308 var x1 = this.x
9309 var y1 = this.y
9310 var x2 = b.x
9311 var y2 = b.y
9312
9313 // u = Y2 * Z1 - Y1 * Z2
9314 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9315 // v = X2 * Z1 - X1 * Z2
9316 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9317
9318 if (v.signum() === 0) {
9319 if (u.signum() === 0) {
9320 return this.twice() // this == b, so double
9321 }
9322
9323 return this.curve.infinity // this = -b, so infinity
9324 }
9325
9326 var v2 = v.square()
9327 var v3 = v2.multiply(v)
9328 var x1v2 = x1.multiply(v2)
9329 var zu2 = u.square().multiply(this.z)
9330
9331 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9332 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9333 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9334 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
9335 // z3 = v^3 * z1 * z2
9336 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9337
9338 return new Point(this.curve, x3, y3, z3)
9339}
9340
9341Point.prototype.twice = function() {
9342 if (this.curve.isInfinity(this)) return this
9343 if (this.y.signum() === 0) return this.curve.infinity
9344
9345 var x1 = this.x
9346 var y1 = this.y
9347
9348 var y1z1 = y1.multiply(this.z)
9349 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9350 var a = this.curve.a
9351
9352 // w = 3 * x1^2 + a * z1^2
9353 var w = x1.square().multiply(THREE)
9354
9355 if (a.signum() !== 0) {
9356 w = w.add(this.z.square().multiply(a))
9357 }
9358
9359 w = w.mod(this.curve.p)
9360 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9361 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9362 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9363 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9364 // z3 = 8 * (y1 * z1)^3
9365 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9366
9367 return new Point(this.curve, x3, y3, z3)
9368}
9369
9370// Simple NAF (Non-Adjacent Form) multiplication algorithm
9371// TODO: modularize the multiplication algorithm
9372Point.prototype.multiply = function(k) {
9373 if (this.curve.isInfinity(this)) return this
9374 if (k.signum() === 0) return this.curve.infinity
9375
9376 var e = k
9377 var h = e.multiply(THREE)
9378
9379 var neg = this.negate()
9380 var R = this
9381
9382 for (var i = h.bitLength() - 2; i > 0; --i) {
9383 R = R.twice()
9384
9385 var hBit = h.testBit(i)
9386 var eBit = e.testBit(i)
9387
9388 if (hBit != eBit) {
9389 R = R.add(hBit ? this : neg)
9390 }
9391 }
9392
9393 return R
9394}
9395
9396// Compute this*j + x*k (simultaneous multiplication)
9397Point.prototype.multiplyTwo = function(j, x, k) {
9398 var i
9399
9400 if (j.bitLength() > k.bitLength())
9401 i = j.bitLength() - 1
9402 else
9403 i = k.bitLength() - 1
9404
9405 var R = this.curve.infinity
9406 var both = this.add(x)
9407
9408 while (i >= 0) {
9409 R = R.twice()
9410
9411 var jBit = j.testBit(i)
9412 var kBit = k.testBit(i)
9413
9414 if (jBit) {
9415 if (kBit) {
9416 R = R.add(both)
9417
9418 } else {
9419 R = R.add(this)
9420 }
9421
9422 } else {
9423 if (kBit) {
9424 R = R.add(x)
9425 }
9426 }
9427 --i
9428 }
9429
9430 return R
9431}
9432
9433Point.prototype.getEncoded = function(compressed) {
9434 if (compressed == undefined) compressed = this.compressed
9435 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9436
9437 var x = this.affineX
9438 var y = this.affineY
9439
9440 var buffer
9441
9442 // Determine size of q in bytes
9443 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9444
9445 // 0x02/0x03 | X
9446 if (compressed) {
9447 buffer = new Buffer(1 + byteLength)
9448 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9449
9450 // 0x04 | X | Y
9451 } else {
9452 buffer = new Buffer(1 + byteLength + byteLength)
9453 buffer.writeUInt8(0x04, 0)
9454
9455 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9456 }
9457
9458 x.toBuffer(byteLength).copy(buffer, 1)
9459
9460 return buffer
9461}
9462
9463Point.decodeFrom = function(curve, buffer) {
9464 var type = buffer.readUInt8(0)
9465 var compressed = (type !== 4)
9466
ebd8d4e8 9467 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9468 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9469
9470 var Q
9471 if (compressed) {
9472 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9473 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9474
9475 var isOdd = (type === 0x03)
9476 Q = curve.pointFromX(isOdd, x)
9477
9478 } else {
9479 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9480
9481 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9482 Q = Point.fromAffine(curve, x, y)
9483 }
9484
9485 Q.compressed = compressed
9486 return Q
9487}
9488
9489Point.prototype.toString = function () {
9490 if (this.curve.isInfinity(this)) return '(INFINITY)'
9491
9492 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9493}
9494
9495module.exports = Point
9496
ab78acc6
IC
9497}).call(this,require("buffer").Buffer)
9498},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9499(function (process,global,Buffer){
9500'use strict';
ebd8d4e8 9501
ab78acc6
IC
9502var crypto = global.crypto || global.msCrypto
9503if(crypto && crypto.getRandomValues) {
9504 module.exports = randomBytes;
9505} else {
9506 module.exports = oldBrowser;
9507}
9508function randomBytes(size, cb) {
9509 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9510 /* This will not work in older browsers.
9511 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9512 */
9513
9514 crypto.getRandomValues(bytes);
9515 if (typeof cb === 'function') {
9516 return process.nextTick(function () {
9517 cb(null, bytes);
9518 });
ebd8d4e8 9519 }
ab78acc6
IC
9520 return bytes;
9521}
9522function oldBrowser() {
9523 throw new Error(
9524 'secure random number generation not supported by this browser\n'+
9525 'use chrome, FireFox or Internet Explorer 11'
9526 )
ebd8d4e8
IC
9527}
9528
ab78acc6
IC
9529}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9530},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9531(function (Buffer){
9532'use strict';
ebd8d4e8 9533
ab78acc6
IC
9534function getFunctionName(fn) {
9535 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9536}
9537
9538function getTypeTypeName(type) {
9539 if (nativeTypes.Function(type)) {
9540 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9541 }
ab78acc6
IC
9542 if (nativeTypes.Object(type)) return JSON.stringify(type);
9543
9544 return type;
ebd8d4e8
IC
9545}
9546
ab78acc6
IC
9547function getValueTypeName(value) {
9548 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9549
ab78acc6
IC
9550 return getFunctionName(value.constructor);
9551}
9552
9553function tfErrorString(type, value) {
9554 var typeTypeName = getTypeTypeName(type);
9555 var valueTypeName = getValueTypeName(value);
9556
9557 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9558}
9559
9560function tfPropertyErrorString(type, name, value) {
9561 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9562}
9563
9564var nativeTypes = {
9565 Array: (function (_Array) {
9566 function Array(_x) {
9567 return _Array.apply(this, arguments);
9568 }
9569
9570 Array.toString = function () {
9571 return _Array.toString();
9572 };
9573
9574 return Array;
9575 })(function (value) {
9576 return value !== null && value !== undefined && value.constructor === Array;
9577 }),
9578 Boolean: function Boolean(value) {
9579 return typeof value === 'boolean';
9580 },
9581 Buffer: (function (_Buffer) {
9582 function Buffer(_x2) {
9583 return _Buffer.apply(this, arguments);
9584 }
9585
9586 Buffer.toString = function () {
9587 return _Buffer.toString();
9588 };
9589
9590 return Buffer;
9591 })(function (value) {
9592 return Buffer.isBuffer(value);
9593 }),
9594 Function: function Function(value) {
9595 return typeof value === 'function';
9596 },
9597 Null: function Null(value) {
9598 return value === undefined || value === null;
9599 },
9600 Number: function Number(value) {
9601 return typeof value === 'number';
9602 },
9603 Object: function Object(value) {
9604 return typeof value === 'object';
9605 },
9606 String: function String(value) {
9607 return typeof value === 'string';
9608 },
9609 '': function _() {
9610 return true;
ebd8d4e8 9611 }
ab78acc6
IC
9612};
9613
9614function tJSON(type) {
9615 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9616}
9617
ab78acc6
IC
9618function sJSON(type) {
9619 var json = tJSON(type);
9620 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9621}
9622
ab78acc6
IC
9623var otherTypes = {
9624 arrayOf: function arrayOf(type) {
9625 function arrayOf(value, strict) {
9626 try {
9627 return nativeTypes.Array(value) && value.every(function (x) {
9628 return typeforce(type, x, strict);
9629 });
9630 } catch (e) {
9631 return false;
9632 }
9633 }
9634 arrayOf.toJSON = function () {
9635 return [tJSON(type)];
9636 };
9637
9638 return arrayOf;
9639 },
9640
9641 maybe: function maybe(type) {
9642 function maybe(value, strict) {
9643 return nativeTypes.Null(value) || typeforce(type, value, strict);
9644 }
9645 maybe.toJSON = function () {
9646 return '?' + sJSON(type);
9647 };
9648
9649 return maybe;
9650 },
9651
9652 object: function object(type) {
9653 function object(value, strict) {
9654 typeforce(nativeTypes.Object, value, strict);
9655
9656 var propertyName, propertyType, propertyValue;
9657
9658 try {
9659 for (propertyName in type) {
9660 propertyType = type[propertyName];
9661 propertyValue = value[propertyName];
9662
9663 typeforce(propertyType, propertyValue, strict);
9664 }
9665 } catch (e) {
9666 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9667 }
9668
9669 if (strict) {
9670 for (propertyName in value) {
9671 if (type[propertyName]) continue;
9672
9673 throw new TypeError('Unexpected property "' + propertyName + '"');
9674 }
9675 }
9676
9677 return true;
9678 }
9679 object.toJSON = function () {
9680 return type;
9681 };
9682
9683 return object;
9684 },
9685
9686 oneOf: function oneOf() {
9687 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9688 types[_key] = arguments[_key];
9689 }
9690
9691 function oneOf(value, strict) {
9692 return types.some(function (type) {
9693 try {
9694 return typeforce(type, value, strict);
9695 } catch (e) {
9696 return false;
9697 }
9698 });
9699 }
9700 oneOf.toJSON = function () {
9701 return types.map(sJSON).join('|');
9702 };
9703
9704 return oneOf;
9705 },
9706
9707 quacksLike: function quacksLike(type) {
9708 function quacksLike(value, strict) {
9709 return type === getValueTypeName(value);
9710 }
9711 quacksLike.toJSON = function () {
9712 return type;
9713 };
9714
9715 return quacksLike;
9716 },
9717
9718 tuple: function tuple() {
9719 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9720 types[_key2] = arguments[_key2];
9721 }
9722
9723 function tuple(value, strict) {
9724 return types.every(function (type, i) {
9725 return typeforce(type, value[i], strict);
9726 });
9727 }
9728 tuple.toJSON = function () {
9729 return '(' + types.map(sJSON).join(', ') + ')';
9730 };
9731
9732 return tuple;
9733 },
9734
9735 value: function value(expected) {
9736 function value(actual) {
9737 return actual === expected;
9738 }
9739 value.toJSON = function () {
9740 return expected;
9741 };
9742
9743 return value;
9744 }
9745};
9746
9747function compile(type) {
9748 if (nativeTypes.String(type)) {
9749 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9750
9751 return nativeTypes[type] || otherTypes.quacksLike(type);
9752 } else if (type && nativeTypes.Object(type)) {
9753 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9754
9755 var compiled = {};
9756
9757 for (var propertyName in type) {
9758 compiled[propertyName] = compile(type[propertyName]);
9759 }
9760
9761 return otherTypes.object(compiled);
9762 } else if (nativeTypes.Function(type)) {
9763 return type;
9764 }
9765
9766 return otherTypes.value(type);
ebd8d4e8
IC
9767}
9768
ab78acc6
IC
9769function typeforce(_x3, _x4, _x5) {
9770 var _again = true;
9771
9772 _function: while (_again) {
9773 var type = _x3,
9774 value = _x4,
9775 strict = _x5;
9776 _again = false;
9777
9778 if (nativeTypes.Function(type)) {
9779 if (type(value, strict)) return true;
9780
9781 throw new TypeError(tfErrorString(type, value));
9782 }
9783
9784 // JIT
9785 _x3 = compile(type);
9786 _x4 = value;
9787 _x5 = strict;
9788 _again = true;
9789 continue _function;
9790 }
ebd8d4e8
IC
9791}
9792
ab78acc6
IC
9793// assign all types to typeforce function
9794var typeName;
9795Object.keys(nativeTypes).forEach(function (typeName) {
9796 var nativeType = nativeTypes[typeName];
9797 nativeType.toJSON = function () {
9798 return typeName;
9799 };
9800
9801 typeforce[typeName] = nativeType;
9802});
ebd8d4e8 9803
ab78acc6
IC
9804for (typeName in otherTypes) {
9805 typeforce[typeName] = otherTypes[typeName];
9806}
ebd8d4e8 9807
ab78acc6
IC
9808module.exports = typeforce;
9809module.exports.compile = compile;
9810}).call(this,require("buffer").Buffer)
9811},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 9812(function (Buffer){
ab78acc6
IC
9813var assert = require('assert')
9814var base58check = require('bs58check')
9815var typeForce = require('typeforce')
9816var networks = require('./networks')
9817var scripts = require('./scripts')
ebd8d4e8 9818
ab78acc6 9819function findScriptTypeByVersion (version) {
ebd8d4e8
IC
9820 for (var networkName in networks) {
9821 var network = networks[networkName]
9822
9823 if (version === network.pubKeyHash) return 'pubkeyhash'
9824 if (version === network.scriptHash) return 'scripthash'
9825 }
9826}
9827
ab78acc6
IC
9828function Address (hash, version) {
9829 typeForce('Buffer', hash)
9830
ebd8d4e8
IC
9831 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9832 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9833
9834 this.hash = hash
9835 this.version = version
9836}
9837
ab78acc6 9838Address.fromBase58Check = function (string) {
ebd8d4e8
IC
9839 var payload = base58check.decode(string)
9840 var version = payload.readUInt8(0)
9841 var hash = payload.slice(1)
9842
9843 return new Address(hash, version)
9844}
9845
ab78acc6 9846Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
9847 network = network || networks.bitcoin
9848
ab78acc6
IC
9849 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9850 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 9851
ab78acc6 9852 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
9853}
9854
ebd8d4e8
IC
9855Address.prototype.toBase58Check = function () {
9856 var payload = new Buffer(21)
9857 payload.writeUInt8(this.version, 0)
9858 this.hash.copy(payload, 1)
9859
9860 return base58check.encode(payload)
9861}
9862
ab78acc6 9863Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
9864 var scriptType = findScriptTypeByVersion(this.version)
9865
9866 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9867 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9868
ab78acc6
IC
9869 assert(false, this.toString() + ' has no matching Script')
9870}
9871
9872Address.prototype.toString = Address.prototype.toBase58Check
9873
9874module.exports = Address
9875
9876}).call(this,require("buffer").Buffer)
9877},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9878var bs58check = require('bs58check')
9879
9880function decode () {
9881 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9882
9883 return bs58check.decode.apply(undefined, arguments)
9884}
9885
9886function encode () {
9887 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9888
9889 return bs58check.encode.apply(undefined, arguments)
9890}
9891
9892module.exports = {
9893 decode: decode,
9894 encode: encode
9895}
9896
9897},{"bs58check":31}],56:[function(require,module,exports){
9898(function (Buffer){
9899var assert = require('assert')
9900var bufferutils = require('./bufferutils')
9901var crypto = require('./crypto')
9902
9903var Transaction = require('./transaction')
9904
9905function Block () {
9906 this.version = 1
9907 this.prevHash = null
9908 this.merkleRoot = null
9909 this.timestamp = 0
9910 this.bits = 0
9911 this.nonce = 0
9912}
9913
9914Block.fromBuffer = function (buffer) {
9915 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9916
9917 var offset = 0
9918 function readSlice (n) {
9919 offset += n
9920 return buffer.slice(offset - n, offset)
9921 }
9922
9923 function readUInt32 () {
9924 var i = buffer.readUInt32LE(offset)
9925 offset += 4
9926 return i
9927 }
9928
9929 var block = new Block()
9930 block.version = readUInt32()
9931 block.prevHash = readSlice(32)
9932 block.merkleRoot = readSlice(32)
9933 block.timestamp = readUInt32()
9934 block.bits = readUInt32()
9935 block.nonce = readUInt32()
9936
9937 if (buffer.length === 80) return block
9938
9939 function readVarInt () {
9940 var vi = bufferutils.readVarInt(buffer, offset)
9941 offset += vi.size
9942 return vi.number
9943 }
9944
9945 // FIXME: poor performance
9946 function readTransaction () {
9947 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9948
9949 offset += tx.toBuffer().length
9950 return tx
9951 }
9952
9953 var nTransactions = readVarInt()
9954 block.transactions = []
9955
9956 for (var i = 0; i < nTransactions; ++i) {
9957 var tx = readTransaction()
9958 block.transactions.push(tx)
9959 }
9960
9961 return block
9962}
9963
9964Block.fromHex = function (hex) {
9965 return Block.fromBuffer(new Buffer(hex, 'hex'))
9966}
9967
9968Block.prototype.getHash = function () {
9969 return crypto.hash256(this.toBuffer(true))
9970}
9971
9972Block.prototype.getId = function () {
9973 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
9974}
9975
ab78acc6
IC
9976Block.prototype.getUTCDate = function () {
9977 var date = new Date(0) // epoch
9978 date.setUTCSeconds(this.timestamp)
ebd8d4e8 9979
ab78acc6
IC
9980 return date
9981}
ebd8d4e8 9982
ab78acc6
IC
9983Block.prototype.toBuffer = function (headersOnly) {
9984 var buffer = new Buffer(80)
ebd8d4e8 9985
ab78acc6
IC
9986 var offset = 0
9987 function writeSlice (slice) {
9988 slice.copy(buffer, offset)
9989 offset += slice.length
9990 }
ebd8d4e8 9991
ab78acc6
IC
9992 function writeUInt32 (i) {
9993 buffer.writeUInt32LE(i, offset)
9994 offset += 4
9995 }
ebd8d4e8 9996
ab78acc6
IC
9997 writeUInt32(this.version)
9998 writeSlice(this.prevHash)
9999 writeSlice(this.merkleRoot)
10000 writeUInt32(this.timestamp)
10001 writeUInt32(this.bits)
10002 writeUInt32(this.nonce)
ebd8d4e8 10003
ab78acc6 10004 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10005
ab78acc6
IC
10006 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10007 var txBuffers = this.transactions.map(function (tx) {
10008 return tx.toBuffer()
10009 })
ebd8d4e8 10010
ab78acc6 10011 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10012}
10013
ab78acc6
IC
10014Block.prototype.toHex = function (headersOnly) {
10015 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10016}
10017
ab78acc6
IC
10018module.exports = Block
10019
10020}).call(this,require("buffer").Buffer)
10021},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10022(function (Buffer){
10023var assert = require('assert')
10024var opcodes = require('./opcodes')
ebd8d4e8
IC
10025
10026// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10027function verifuint (value, max) {
ebd8d4e8
IC
10028 assert(typeof value === 'number', 'cannot write a non-number as a number')
10029 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10030 assert(value <= max, 'value is larger than maximum value for type')
10031 assert(Math.floor(value) === value, 'value has a fractional component')
10032}
10033
ab78acc6 10034function pushDataSize (i) {
ebd8d4e8 10035 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10036 : i < 0xff ? 2
10037 : i < 0xffff ? 3
10038 : 5
ebd8d4e8
IC
10039}
10040
ab78acc6 10041function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10042 var opcode = buffer.readUInt8(offset)
10043 var number, size
10044
10045 // ~6 bit
10046 if (opcode < opcodes.OP_PUSHDATA1) {
10047 number = opcode
10048 size = 1
10049
10050 // 8 bit
10051 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10052 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10053 number = buffer.readUInt8(offset + 1)
10054 size = 2
10055
10056 // 16 bit
10057 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10058 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10059 number = buffer.readUInt16LE(offset + 1)
10060 size = 3
10061
10062 // 32 bit
10063 } else {
ab78acc6 10064 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10065 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10066
10067 number = buffer.readUInt32LE(offset + 1)
10068 size = 5
ebd8d4e8
IC
10069 }
10070
10071 return {
10072 opcode: opcode,
10073 number: number,
10074 size: size
10075 }
10076}
10077
ab78acc6 10078function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10079 var a = buffer.readUInt32LE(offset)
10080 var b = buffer.readUInt32LE(offset + 4)
10081 b *= 0x100000000
10082
10083 verifuint(b + a, 0x001fffffffffffff)
10084
10085 return b + a
10086}
10087
ab78acc6 10088function readVarInt (buffer, offset) {
ebd8d4e8
IC
10089 var t = buffer.readUInt8(offset)
10090 var number, size
10091
10092 // 8 bit
10093 if (t < 253) {
10094 number = t
10095 size = 1
10096
10097 // 16 bit
10098 } else if (t < 254) {
10099 number = buffer.readUInt16LE(offset + 1)
10100 size = 3
10101
10102 // 32 bit
10103 } else if (t < 255) {
10104 number = buffer.readUInt32LE(offset + 1)
10105 size = 5
10106
10107 // 64 bit
10108 } else {
10109 number = readUInt64LE(buffer, offset + 1)
10110 size = 9
10111 }
10112
10113 return {
10114 number: number,
10115 size: size
10116 }
10117}
10118
ab78acc6 10119function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10120 var size = pushDataSize(number)
10121
10122 // ~6 bit
10123 if (size === 1) {
10124 buffer.writeUInt8(number, offset)
10125
10126 // 8 bit
10127 } else if (size === 2) {
10128 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10129 buffer.writeUInt8(number, offset + 1)
10130
10131 // 16 bit
10132 } else if (size === 3) {
10133 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10134 buffer.writeUInt16LE(number, offset + 1)
10135
10136 // 32 bit
10137 } else {
10138 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10139 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10140 }
10141
10142 return size
10143}
10144
ab78acc6 10145function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10146 verifuint(value, 0x001fffffffffffff)
10147
10148 buffer.writeInt32LE(value & -1, offset)
10149 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10150}
10151
ab78acc6
IC
10152function varIntSize (i) {
10153 return i < 253 ? 1
10154 : i < 0x10000 ? 3
10155 : i < 0x100000000 ? 5
10156 : 9
ebd8d4e8
IC
10157}
10158
ab78acc6 10159function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10160 var size = varIntSize(number)
10161
10162 // 8 bit
10163 if (size === 1) {
10164 buffer.writeUInt8(number, offset)
10165
10166 // 16 bit
10167 } else if (size === 3) {
10168 buffer.writeUInt8(253, offset)
10169 buffer.writeUInt16LE(number, offset + 1)
10170
10171 // 32 bit
10172 } else if (size === 5) {
10173 buffer.writeUInt8(254, offset)
10174 buffer.writeUInt32LE(number, offset + 1)
10175
10176 // 64 bit
10177 } else {
10178 buffer.writeUInt8(255, offset)
10179 writeUInt64LE(buffer, number, offset + 1)
10180 }
10181
10182 return size
10183}
10184
ab78acc6
IC
10185function varIntBuffer (i) {
10186 var size = varIntSize(i)
10187 var buffer = new Buffer(size)
10188 writeVarInt(buffer, i, 0)
10189
10190 return buffer
10191}
10192
10193function reverse (buffer) {
10194 var buffer2 = new Buffer(buffer)
10195 Array.prototype.reverse.call(buffer2)
10196 return buffer2
10197}
10198
ebd8d4e8
IC
10199module.exports = {
10200 pushDataSize: pushDataSize,
10201 readPushDataInt: readPushDataInt,
10202 readUInt64LE: readUInt64LE,
10203 readVarInt: readVarInt,
ab78acc6
IC
10204 reverse: reverse,
10205 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10206 varIntSize: varIntSize,
10207 writePushDataInt: writePushDataInt,
10208 writeUInt64LE: writeUInt64LE,
10209 writeVarInt: writeVarInt
10210}
10211
ab78acc6
IC
10212}).call(this,require("buffer").Buffer)
10213},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10214var createHash = require('create-hash')
ebd8d4e8 10215
ab78acc6 10216function hash160 (buffer) {
ebd8d4e8
IC
10217 return ripemd160(sha256(buffer))
10218}
10219
ab78acc6 10220function hash256 (buffer) {
ebd8d4e8
IC
10221 return sha256(sha256(buffer))
10222}
10223
ab78acc6
IC
10224function ripemd160 (buffer) {
10225 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10226}
10227
ab78acc6
IC
10228function sha1 (buffer) {
10229 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10230}
10231
ab78acc6
IC
10232function sha256 (buffer) {
10233 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10234}
10235
10236// FIXME: Name not consistent with others
ab78acc6 10237var createHmac = require('create-hmac')
ebd8d4e8 10238
ab78acc6
IC
10239function HmacSHA256 (buffer, secret) {
10240 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10241 return createHmac('sha256', secret).update(buffer).digest()
10242}
ebd8d4e8 10243
ab78acc6
IC
10244function HmacSHA512 (buffer, secret) {
10245 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10246 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10247}
10248
10249module.exports = {
10250 ripemd160: ripemd160,
10251 sha1: sha1,
10252 sha256: sha256,
10253 hash160: hash160,
10254 hash256: hash256,
10255 HmacSHA256: HmacSHA256,
10256 HmacSHA512: HmacSHA512
10257}
10258
ab78acc6 10259},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10260(function (Buffer){
ab78acc6
IC
10261var assert = require('assert')
10262var createHmac = require('create-hmac')
10263var typeForce = require('typeforce')
ebd8d4e8 10264
ab78acc6
IC
10265var BigInteger = require('bigi')
10266var ECSignature = require('./ecsignature')
10267
10268var ZERO = new Buffer([0])
10269var ONE = new Buffer([1])
ebd8d4e8
IC
10270
10271// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10272function deterministicGenerateK (curve, hash, d, checkSig) {
10273 typeForce('Buffer', hash)
10274 typeForce('BigInteger', d)
10275
10276 // FIXME: remove/uncomment for 2.0.0
10277 // typeForce('Function', checkSig)
10278
10279 if (typeof checkSig !== 'function') {
10280 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10281
10282 checkSig = function (k) {
10283 var G = curve.G
10284 var n = curve.n
10285 var e = BigInteger.fromBuffer(hash)
10286
10287 var Q = G.multiply(k)
10288
10289 if (curve.isInfinity(Q))
10290 return false
10291
10292 var r = Q.affineX.mod(n)
10293 if (r.signum() === 0)
10294 return false
10295
10296 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10297 if (s.signum() === 0)
10298 return false
10299
10300 return true
10301 }
10302 }
10303
10304 // sanity check
ebd8d4e8 10305 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10306
10307 var x = d.toBuffer(32)
10308 var k = new Buffer(32)
10309 var v = new Buffer(32)
10310
ab78acc6 10311 // Step A, ignored as hash already provided
ebd8d4e8
IC
10312 // Step B
10313 v.fill(1)
10314
10315 // Step C
10316 k.fill(0)
10317
10318 // Step D
ab78acc6
IC
10319 k = createHmac('sha256', k)
10320 .update(v)
10321 .update(ZERO)
10322 .update(x)
10323 .update(hash)
10324 .digest()
ebd8d4e8
IC
10325
10326 // Step E
ab78acc6 10327 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10328
10329 // Step F
ab78acc6
IC
10330 k = createHmac('sha256', k)
10331 .update(v)
10332 .update(ONE)
10333 .update(x)
10334 .update(hash)
10335 .digest()
ebd8d4e8
IC
10336
10337 // Step G
ab78acc6 10338 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10339
10340 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10341 // Step H2b
ab78acc6 10342 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10343
10344 var T = BigInteger.fromBuffer(v)
10345
ab78acc6
IC
10346 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10347 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10348 k = createHmac('sha256', k)
10349 .update(v)
10350 .update(ZERO)
10351 .digest()
10352
10353 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10354
ab78acc6
IC
10355 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10356 // Step H2b again
10357 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10358 T = BigInteger.fromBuffer(v)
10359 }
10360
10361 return T
10362}
10363
ab78acc6
IC
10364function sign (curve, hash, d) {
10365 var r, s
ebd8d4e8 10366
ab78acc6 10367 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10368 var n = curve.n
10369 var G = curve.G
ebd8d4e8 10370
ab78acc6
IC
10371 deterministicGenerateK(curve, hash, d, function (k) {
10372 var Q = G.multiply(k)
10373
10374 if (curve.isInfinity(Q))
10375 return false
10376
10377 r = Q.affineX.mod(n)
10378 if (r.signum() === 0)
10379 return false
10380
10381 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10382 if (s.signum() === 0)
10383 return false
ebd8d4e8 10384
ab78acc6
IC
10385 return true
10386 })
ebd8d4e8
IC
10387
10388 var N_OVER_TWO = n.shiftRight(1)
10389
10390 // enforce low S values, see bip62: 'low s values in signatures'
10391 if (s.compareTo(N_OVER_TWO) > 0) {
10392 s = n.subtract(s)
10393 }
10394
10395 return new ECSignature(r, s)
10396}
10397
ab78acc6 10398function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10399 var n = curve.n
10400 var G = curve.G
10401
10402 var r = signature.r
10403 var s = signature.s
10404
ab78acc6
IC
10405 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10406 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10407 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10408
ab78acc6 10409 // c = s^-1 mod n
ebd8d4e8
IC
10410 var c = s.modInverse(n)
10411
ab78acc6
IC
10412 // 1.4.4 Compute u1 = es^−1 mod n
10413 // u2 = rs^−1 mod n
ebd8d4e8
IC
10414 var u1 = e.multiply(c).mod(n)
10415 var u2 = r.multiply(c).mod(n)
10416
ab78acc6
IC
10417 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10418 var R = G.multiplyTwo(u1, Q, u2)
10419 var v = R.affineX.mod(n)
ebd8d4e8 10420
ab78acc6
IC
10421 // 1.4.5 (cont.) Enforce R is not at infinity
10422 if (curve.isInfinity(R)) return false
10423
10424 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10425 return v.equals(r)
10426}
10427
ab78acc6
IC
10428function verify (curve, hash, signature, Q) {
10429 // 1.4.2 H = Hash(M), already done by the user
10430 // 1.4.3 e = H
10431 var e = BigInteger.fromBuffer(hash)
10432
10433 return verifyRaw(curve, e, signature, Q)
10434}
10435
ebd8d4e8
IC
10436/**
10437 * Recover a public key from a signature.
10438 *
10439 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10440 * Key Recovery Operation".
10441 *
10442 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10443 */
ab78acc6 10444function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10445 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10446
ab78acc6
IC
10447 var n = curve.n
10448 var G = curve.G
10449
ebd8d4e8
IC
10450 var r = signature.r
10451 var s = signature.s
10452
ab78acc6
IC
10453 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10454 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10455
ebd8d4e8
IC
10456 // A set LSB signifies that the y-coordinate is odd
10457 var isYOdd = i & 1
10458
10459 // The more significant bit specifies whether we should use the
10460 // first or second candidate key.
10461 var isSecondKey = i >> 1
10462
ebd8d4e8
IC
10463 // 1.1 Let x = r + jn
10464 var x = isSecondKey ? r.add(n) : r
10465 var R = curve.pointFromX(isYOdd, x)
10466
10467 // 1.4 Check that nR is at infinity
10468 var nR = R.multiply(n)
10469 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10470
10471 // Compute -e from e
10472 var eNeg = e.negate().mod(n)
10473
10474 // 1.6.1 Compute Q = r^-1 (sR - eG)
10475 // Q = r^-1 (sR + -eG)
10476 var rInv = r.modInverse(n)
10477
10478 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10479 curve.validate(Q)
10480
10481 return Q
10482}
10483
10484/**
10485 * Calculate pubkey extraction parameter.
10486 *
10487 * When extracting a pubkey from a signature, we have to
10488 * distinguish four different cases. Rather than putting this
10489 * burden on the verifier, Bitcoin includes a 2-bit value with the
10490 * signature.
10491 *
10492 * This function simply tries all four cases and returns the value
10493 * that resulted in a successful pubkey recovery.
10494 */
ab78acc6 10495function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10496 for (var i = 0; i < 4; i++) {
10497 var Qprime = recoverPubKey(curve, e, signature, i)
10498
10499 // 1.6.2 Verify Q
10500 if (Qprime.equals(Q)) {
10501 return i
10502 }
10503 }
10504
10505 throw new Error('Unable to find valid recovery factor')
10506}
10507
10508module.exports = {
10509 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10510 deterministicGenerateK: deterministicGenerateK,
10511 recoverPubKey: recoverPubKey,
10512 sign: sign,
10513 verify: verify,
10514 verifyRaw: verifyRaw
10515}
10516
ab78acc6
IC
10517}).call(this,require("buffer").Buffer)
10518},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10519(function (Buffer){
ab78acc6
IC
10520var assert = require('assert')
10521var base58check = require('bs58check')
10522var ecdsa = require('./ecdsa')
10523var networks = require('./networks')
10524var randomBytes = require('randombytes')
10525var typeForce = require('typeforce')
ebd8d4e8 10526
ab78acc6
IC
10527var BigInteger = require('bigi')
10528var ECPubKey = require('./ecpubkey')
ebd8d4e8 10529
ab78acc6
IC
10530var ecurve = require('ecurve')
10531var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10532
ab78acc6 10533function ECKey (d, compressed) {
ebd8d4e8 10534 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10535 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10536
ab78acc6 10537 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10538
10539 this.d = d
10540 this.pub = new ECPubKey(Q, compressed)
10541}
10542
ab78acc6
IC
10543// Constants
10544ECKey.curve = secp256k1
10545
ebd8d4e8 10546// Static constructors
ab78acc6 10547ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10548 var payload = base58check.decode(string)
10549 var compressed = false
10550
10551 // Ignore the version byte
10552 payload = payload.slice(1)
10553
10554 if (payload.length === 33) {
10555 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10556
10557 // Truncate the compression flag
10558 payload = payload.slice(0, -1)
10559 compressed = true
10560 }
10561
10562 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10563
10564 var d = BigInteger.fromBuffer(payload)
10565 return new ECKey(d, compressed)
10566}
10567
ab78acc6
IC
10568ECKey.makeRandom = function (compressed, rng) {
10569 rng = rng || randomBytes
ebd8d4e8
IC
10570
10571 var buffer = rng(32)
ab78acc6
IC
10572 typeForce('Buffer', buffer)
10573 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10574
10575 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10576 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10577
10578 return new ECKey(d, compressed)
10579}
10580
10581// Export functions
ab78acc6 10582ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10583 network = network || networks.bitcoin
10584
10585 var bufferLen = this.pub.compressed ? 34 : 33
10586 var buffer = new Buffer(bufferLen)
10587
10588 buffer.writeUInt8(network.wif, 0)
10589 this.d.toBuffer(32).copy(buffer, 1)
10590
10591 if (this.pub.compressed) {
10592 buffer.writeUInt8(0x01, 33)
10593 }
10594
10595 return base58check.encode(buffer)
10596}
10597
10598// Operations
ab78acc6
IC
10599ECKey.prototype.sign = function (hash) {
10600 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10601}
10602
10603module.exports = ECKey
10604
ab78acc6
IC
10605}).call(this,require("buffer").Buffer)
10606},{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
ebd8d4e8 10607(function (Buffer){
ab78acc6
IC
10608var crypto = require('./crypto')
10609var ecdsa = require('./ecdsa')
10610var typeForce = require('typeforce')
10611var networks = require('./networks')
ebd8d4e8 10612
ab78acc6 10613var Address = require('./address')
ebd8d4e8 10614
ab78acc6
IC
10615var ecurve = require('ecurve')
10616var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10617
ab78acc6
IC
10618function ECPubKey (Q, compressed) {
10619 if (compressed === undefined) {
10620 compressed = true
10621 }
ebd8d4e8 10622
ab78acc6
IC
10623 typeForce('Point', Q)
10624 typeForce('Boolean', compressed)
ebd8d4e8
IC
10625
10626 this.compressed = compressed
10627 this.Q = Q
10628}
10629
ab78acc6
IC
10630// Constants
10631ECPubKey.curve = secp256k1
10632
ebd8d4e8 10633// Static constructors
ab78acc6
IC
10634ECPubKey.fromBuffer = function (buffer) {
10635 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10636 return new ECPubKey(Q, Q.compressed)
10637}
10638
ab78acc6 10639ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10640 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10641}
10642
10643// Operations
ab78acc6 10644ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10645 network = network || networks.bitcoin
10646
10647 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10648}
10649
ab78acc6
IC
10650ECPubKey.prototype.verify = function (hash, signature) {
10651 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10652}
10653
10654// Export functions
ab78acc6 10655ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10656 return this.Q.getEncoded(this.compressed)
10657}
10658
ab78acc6 10659ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10660 return this.toBuffer().toString('hex')
10661}
10662
10663module.exports = ECPubKey
10664
ab78acc6
IC
10665}).call(this,require("buffer").Buffer)
10666},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10667(function (Buffer){
ab78acc6
IC
10668var assert = require('assert')
10669var typeForce = require('typeforce')
10670
10671var BigInteger = require('bigi')
10672
10673function ECSignature (r, s) {
10674 typeForce('BigInteger', r)
10675 typeForce('BigInteger', s)
ebd8d4e8 10676
ebd8d4e8
IC
10677 this.r = r
10678 this.s = s
10679}
10680
ab78acc6 10681ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10682 assert.equal(buffer.length, 65, 'Invalid signature length')
10683 var i = buffer.readUInt8(0) - 27
10684
10685 // At most 3 bits
10686 assert.equal(i, i & 7, 'Invalid signature parameter')
10687 var compressed = !!(i & 4)
10688
10689 // Recovery param only
10690 i = i & 3
10691
10692 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10693 var s = BigInteger.fromBuffer(buffer.slice(33))
10694
10695 return {
10696 compressed: compressed,
10697 i: i,
10698 signature: new ECSignature(r, s)
10699 }
10700}
10701
ab78acc6 10702ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10703 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10704 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10705 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10706
10707 var rLen = buffer.readUInt8(3)
10708 assert(rLen > 0, 'R length is zero')
10709
10710 var offset = 4 + rLen
10711 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10712
10713 var sLen = buffer.readUInt8(offset + 1)
10714 assert(sLen > 0, 'S length is zero')
10715
10716 var rB = buffer.slice(4, offset)
10717 var sB = buffer.slice(offset + 2)
10718 offset += 2 + sLen
10719
10720 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10721 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10722 }
10723
10724 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10725 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10726 }
10727
10728 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10729 var r = BigInteger.fromDERInteger(rB)
10730 var s = BigInteger.fromDERInteger(sB)
10731
10732 assert(r.signum() >= 0, 'R value is negative')
10733 assert(s.signum() >= 0, 'S value is negative')
10734
10735 return new ECSignature(r, s)
10736}
10737
ab78acc6
IC
10738// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10739ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10740 var hashType = buffer.readUInt8(buffer.length - 1)
10741 var hashTypeMod = hashType & ~0x80
10742
ab78acc6 10743 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10744
10745 return {
10746 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10747 hashType: hashType
10748 }
10749}
10750
ab78acc6
IC
10751ECSignature.prototype.toCompact = function (i, compressed) {
10752 if (compressed) {
10753 i += 4
10754 }
10755
ebd8d4e8
IC
10756 i += 27
10757
10758 var buffer = new Buffer(65)
10759 buffer.writeUInt8(i, 0)
10760
10761 this.r.toBuffer(32).copy(buffer, 1)
10762 this.s.toBuffer(32).copy(buffer, 33)
10763
10764 return buffer
10765}
10766
ab78acc6 10767ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
10768 var rBa = this.r.toDERInteger()
10769 var sBa = this.s.toDERInteger()
10770
10771 var sequence = []
ab78acc6
IC
10772
10773 // INTEGER
10774 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
10775 sequence = sequence.concat(rBa)
10776
ab78acc6
IC
10777 // INTEGER
10778 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
10779 sequence = sequence.concat(sBa)
10780
ab78acc6
IC
10781 // SEQUENCE
10782 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
10783
10784 return new Buffer(sequence)
10785}
10786
ab78acc6
IC
10787ECSignature.prototype.toScriptSignature = function (hashType) {
10788 var hashTypeMod = hashType & ~0x80
10789 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10790
ebd8d4e8
IC
10791 var hashTypeBuffer = new Buffer(1)
10792 hashTypeBuffer.writeUInt8(hashType, 0)
10793
10794 return Buffer.concat([this.toDER(), hashTypeBuffer])
10795}
10796
10797module.exports = ECSignature
10798
ab78acc6
IC
10799}).call(this,require("buffer").Buffer)
10800},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 10801(function (Buffer){
ab78acc6
IC
10802var assert = require('assert')
10803var base58check = require('bs58check')
10804var bcrypto = require('./crypto')
10805var createHmac = require('create-hmac')
10806var typeForce = require('typeforce')
10807var networks = require('./networks')
10808
10809var BigInteger = require('bigi')
10810var ECKey = require('./eckey')
10811var ECPubKey = require('./ecpubkey')
10812
10813var ecurve = require('ecurve')
ebd8d4e8
IC
10814var curve = ecurve.getCurveByName('secp256k1')
10815
ab78acc6 10816function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
10817 for (var name in networks) {
10818 var network = networks[name]
10819
ab78acc6
IC
10820 if (version === network.bip32.private || version === network.bip32.public) {
10821 return network
ebd8d4e8
IC
10822 }
10823 }
10824
ab78acc6 10825 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
10826}
10827
ab78acc6 10828function HDNode (K, chainCode, network) {
ebd8d4e8
IC
10829 network = network || networks.bitcoin
10830
ab78acc6
IC
10831 typeForce('Buffer', chainCode)
10832
10833 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
10834 assert(network.bip32, 'Unknown BIP32 constants for network')
10835
10836 this.chainCode = chainCode
10837 this.depth = 0
10838 this.index = 0
ab78acc6 10839 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
10840 this.network = network
10841
10842 if (K instanceof BigInteger) {
10843 this.privKey = new ECKey(K, true)
10844 this.pubKey = this.privKey.pub
ab78acc6
IC
10845 } else if (K instanceof ECKey) {
10846 assert(K.pub.compressed, 'ECKey must be compressed')
10847 this.privKey = K
10848 this.pubKey = K.pub
10849 } else if (K instanceof ECPubKey) {
10850 assert(K.compressed, 'ECPubKey must be compressed')
10851 this.pubKey = K
ebd8d4e8
IC
10852 } else {
10853 this.pubKey = new ECPubKey(K, true)
10854 }
10855}
10856
10857HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10858HDNode.HIGHEST_BIT = 0x80000000
10859HDNode.LENGTH = 78
10860
ab78acc6
IC
10861HDNode.fromSeedBuffer = function (seed, network) {
10862 typeForce('Buffer', seed)
10863
10864 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10865 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10866
10867 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
10868 var IL = I.slice(0, 32)
10869 var IR = I.slice(32)
10870
10871 // In case IL is 0 or >= n, the master key is invalid
10872 // This is handled by `new ECKey` in the HDNode constructor
10873 var pIL = BigInteger.fromBuffer(IL)
10874
10875 return new HDNode(pIL, IR, network)
10876}
10877
ab78acc6 10878HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
10879 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10880}
10881
ab78acc6
IC
10882HDNode.fromBase58 = function (string, network) {
10883 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
10884}
10885
ab78acc6
IC
10886// FIXME: remove in 2.x.y
10887HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10888 if (!__ignoreDeprecation) {
10889 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10890 }
10891
ebd8d4e8
IC
10892 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10893
10894 // 4 byte: version bytes
10895 var version = buffer.readUInt32BE(0)
ab78acc6
IC
10896
10897 if (network) {
10898 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10899
10900 // auto-detect
10901 } else {
10902 network = findBIP32NetworkByVersion(version)
10903 }
ebd8d4e8
IC
10904
10905 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10906 var depth = buffer.readUInt8(4)
10907
10908 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10909 var parentFingerprint = buffer.readUInt32BE(5)
10910 if (depth === 0) {
10911 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10912 }
10913
10914 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10915 // This is encoded in MSB order. (0x00000000 if master key)
10916 var index = buffer.readUInt32BE(9)
10917 assert(depth > 0 || index === 0, 'Invalid index')
10918
10919 // 32 bytes: the chain code
10920 var chainCode = buffer.slice(13, 45)
ab78acc6 10921 var data, hd
ebd8d4e8
IC
10922
10923 // 33 bytes: private key data (0x00 + k)
ab78acc6 10924 if (version === network.bip32.private) {
ebd8d4e8 10925 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 10926 data = buffer.slice(46, 78)
ebd8d4e8 10927 var d = BigInteger.fromBuffer(data)
ab78acc6 10928 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
10929
10930 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10931 } else {
ab78acc6 10932 data = buffer.slice(45, 78)
ebd8d4e8
IC
10933 var Q = ecurve.Point.decodeFrom(curve, data)
10934 assert.equal(Q.compressed, true, 'Invalid public key')
10935
10936 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10937 // If not, the extended public key is invalid.
10938 curve.validate(Q)
10939
ab78acc6 10940 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
10941 }
10942
10943 hd.depth = depth
10944 hd.index = index
10945 hd.parentFingerprint = parentFingerprint
10946
10947 return hd
10948}
10949
ab78acc6
IC
10950// FIXME: remove in 2.x.y
10951HDNode.fromHex = function (hex, network) {
10952 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
10953}
10954
ab78acc6
IC
10955HDNode.prototype.getIdentifier = function () {
10956 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
10957}
10958
ab78acc6 10959HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
10960 return this.getIdentifier().slice(0, 4)
10961}
10962
ab78acc6 10963HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
10964 return this.pubKey.getAddress(this.network)
10965}
10966
ab78acc6
IC
10967HDNode.prototype.neutered = function () {
10968 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10969 neutered.depth = this.depth
10970 neutered.index = this.index
10971 neutered.parentFingerprint = this.parentFingerprint
10972
10973 return neutered
10974}
10975
10976HDNode.prototype.toBase58 = function (isPrivate) {
10977 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
10978}
10979
ab78acc6
IC
10980// FIXME: remove in 2.x.y
10981HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10982 if (isPrivate === undefined) {
10983 isPrivate = !!this.privKey
10984
10985 // FIXME: remove in 2.x.y
10986 } else {
10987 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10988 }
10989
10990 if (!__ignoreDeprecation) {
10991 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10992 }
ebd8d4e8
IC
10993
10994 // Version
10995 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10996 var buffer = new Buffer(HDNode.LENGTH)
10997
10998 // 4 bytes: version bytes
10999 buffer.writeUInt32BE(version, 0)
11000
11001 // Depth
11002 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11003 buffer.writeUInt8(this.depth, 4)
11004
11005 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11006 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11007
11008 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11009 // This is encoded in Big endian. (0x00000000 if master key)
11010 buffer.writeUInt32BE(this.index, 9)
11011
11012 // 32 bytes: the chain code
11013 this.chainCode.copy(buffer, 13)
11014
11015 // 33 bytes: the public key or private key data
11016 if (isPrivate) {
ab78acc6 11017 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11018 assert(this.privKey, 'Missing private key')
11019
11020 // 0x00 + k for private keys
11021 buffer.writeUInt8(0, 45)
11022 this.privKey.d.toBuffer(32).copy(buffer, 46)
11023 } else {
ebd8d4e8
IC
11024 // X9.62 encoding for public keys
11025 this.pubKey.toBuffer().copy(buffer, 45)
11026 }
11027
11028 return buffer
11029}
11030
ab78acc6
IC
11031// FIXME: remove in 2.x.y
11032HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11033 return this.toBuffer(isPrivate).toString('hex')
11034}
11035
11036// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11037HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11038 var isHardened = index >= HDNode.HIGHEST_BIT
11039 var indexBuffer = new Buffer(4)
11040 indexBuffer.writeUInt32BE(index, 0)
11041
11042 var data
11043
11044 // Hardened child
11045 if (isHardened) {
11046 assert(this.privKey, 'Could not derive hardened child key')
11047
11048 // data = 0x00 || ser256(kpar) || ser32(index)
11049 data = Buffer.concat([
11050 this.privKey.d.toBuffer(33),
11051 indexBuffer
11052 ])
11053
11054 // Normal child
11055 } else {
11056 // data = serP(point(kpar)) || ser32(index)
11057 // = serP(Kpar) || ser32(index)
11058 data = Buffer.concat([
11059 this.pubKey.toBuffer(),
11060 indexBuffer
11061 ])
11062 }
11063
ab78acc6 11064 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11065 var IL = I.slice(0, 32)
11066 var IR = I.slice(32)
11067
11068 var pIL = BigInteger.fromBuffer(IL)
11069
11070 // In case parse256(IL) >= n, proceed with the next value for i
11071 if (pIL.compareTo(curve.n) >= 0) {
11072 return this.derive(index + 1)
11073 }
11074
11075 // Private parent key -> private child key
11076 var hd
11077 if (this.privKey) {
11078 // ki = parse256(IL) + kpar (mod n)
11079 var ki = pIL.add(this.privKey.d).mod(curve.n)
11080
11081 // In case ki == 0, proceed with the next value for i
11082 if (ki.signum() === 0) {
11083 return this.derive(index + 1)
11084 }
11085
11086 hd = new HDNode(ki, IR, this.network)
11087
11088 // Public parent key -> public child key
11089 } else {
11090 // Ki = point(parse256(IL)) + Kpar
11091 // = G*IL + Kpar
11092 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11093
11094 // In case Ki is the point at infinity, proceed with the next value for i
11095 if (curve.isInfinity(Ki)) {
11096 return this.derive(index + 1)
11097 }
11098
11099 hd = new HDNode(Ki, IR, this.network)
11100 }
11101
11102 hd.depth = this.depth + 1
11103 hd.index = index
11104 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11105
11106 return hd
11107}
11108
ab78acc6 11109HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11110 // Only derives hardened private keys by default
11111 return this.derive(index + HDNode.HIGHEST_BIT)
11112}
11113
11114HDNode.prototype.toString = HDNode.prototype.toBase58
11115
11116module.exports = HDNode
11117
ab78acc6
IC
11118}).call(this,require("buffer").Buffer)
11119},{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
ebd8d4e8 11120module.exports = {
ab78acc6
IC
11121 Address: require('./address'),
11122 base58check: require('./base58check'),
11123 Block: require('./block'),
11124 bufferutils: require('./bufferutils'),
11125 crypto: require('./crypto'),
11126 ecdsa: require('./ecdsa'),
11127 ECKey: require('./eckey'),
11128 ECPubKey: require('./ecpubkey'),
11129 ECSignature: require('./ecsignature'),
11130 Message: require('./message'),
11131 opcodes: require('./opcodes'),
11132 HDNode: require('./hdnode'),
11133 Script: require('./script'),
11134 scripts: require('./scripts'),
11135 Transaction: require('./transaction'),
11136 TransactionBuilder: require('./transaction_builder'),
11137 networks: require('./networks'),
11138 Wallet: require('./wallet')
11139}
11140
11141},{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
ebd8d4e8 11142(function (Buffer){
ab78acc6
IC
11143var bufferutils = require('./bufferutils')
11144var crypto = require('./crypto')
11145var ecdsa = require('./ecdsa')
11146var networks = require('./networks')
11147
11148var BigInteger = require('bigi')
11149var ECPubKey = require('./ecpubkey')
11150var ECSignature = require('./ecsignature')
11151
11152var ecurve = require('ecurve')
ebd8d4e8
IC
11153var ecparams = ecurve.getCurveByName('secp256k1')
11154
ab78acc6 11155function magicHash (message, network) {
ebd8d4e8
IC
11156 var magicPrefix = new Buffer(network.magicPrefix)
11157 var messageBuffer = new Buffer(message)
ab78acc6 11158 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11159
11160 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11161 return crypto.hash256(buffer)
11162}
11163
ab78acc6 11164function sign (privKey, message, network) {
ebd8d4e8
IC
11165 network = network || networks.bitcoin
11166
11167 var hash = magicHash(message, network)
11168 var signature = privKey.sign(hash)
11169 var e = BigInteger.fromBuffer(hash)
11170 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11171
11172 return signature.toCompact(i, privKey.pub.compressed)
11173}
11174
11175// TODO: network could be implied from address
ab78acc6
IC
11176function verify (address, signature, message, network) {
11177 if (!Buffer.isBuffer(signature)) {
11178 signature = new Buffer(signature, 'base64')
ebd8d4e8 11179 }
ab78acc6 11180
ebd8d4e8
IC
11181 network = network || networks.bitcoin
11182
11183 var hash = magicHash(message, network)
ab78acc6 11184 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11185 var e = BigInteger.fromBuffer(hash)
11186 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11187
11188 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11189 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11190}
11191
11192module.exports = {
11193 magicHash: magicHash,
11194 sign: sign,
11195 verify: verify
11196}
11197
ab78acc6
IC
11198}).call(this,require("buffer").Buffer)
11199},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
ebd8d4e8
IC
11200// https://en.bitcoin.it/wiki/List_of_address_prefixes
11201// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11202
11203var networks = {
11204 bitcoin: {
11205 magicPrefix: '\x18Bitcoin Signed Message:\n',
11206 bip32: {
11207 public: 0x0488b21e,
11208 private: 0x0488ade4
11209 },
11210 pubKeyHash: 0x00,
11211 scriptHash: 0x05,
11212 wif: 0x80,
11213 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11214 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11215 estimateFee: estimateFee('bitcoin')
a9385c1b 11216 },
ab78acc6
IC
11217 testnet: {
11218 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11219 bip32: {
ab78acc6
IC
11220 public: 0x043587cf,
11221 private: 0x04358394
a9385c1b 11222 },
ab78acc6
IC
11223 pubKeyHash: 0x6f,
11224 scriptHash: 0xc4,
11225 wif: 0xef,
11226 dustThreshold: 546,
cb325c58 11227 feePerKb: 10000,
ab78acc6 11228 estimateFee: estimateFee('testnet')
a9385c1b 11229 },
ab78acc6
IC
11230 litecoin: {
11231 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11232 bip32: {
ab78acc6
IC
11233 public: 0x019da462,
11234 private: 0x019d9cfe
a9385c1b 11235 },
ab78acc6
IC
11236 pubKeyHash: 0x30,
11237 scriptHash: 0x05,
11238 wif: 0xb0,
11239 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11240 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11241 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11242 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11243 },
11244 dogecoin: {
11245 magicPrefix: '\x19Dogecoin Signed Message:\n',
11246 bip32: {
11247 public: 0x02facafd,
11248 private: 0x02fac398
11249 },
11250 pubKeyHash: 0x1e,
11251 scriptHash: 0x16,
11252 wif: 0x9e,
11253 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11254 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11255 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11256 estimateFee: estimateFee('dogecoin')
11257 },
ab78acc6
IC
11258 viacoin: {
11259 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11260 bip32: {
ab78acc6
IC
11261 public: 0x0488b21e,
11262 private: 0x0488ade4
ebd8d4e8 11263 },
ab78acc6
IC
11264 pubKeyHash: 0x47,
11265 scriptHash: 0x21,
11266 wif: 0xc7,
11267 dustThreshold: 560,
11268 dustSoftThreshold: 100000,
11269 feePerKb: 100000, //
11270 estimateFee: estimateFee('viacoin')
ebd8d4e8 11271 },
ab78acc6
IC
11272 viacointestnet: {
11273 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11274 bip32: {
11275 public: 0x043587cf,
11276 private: 0x04358394
11277 },
ab78acc6 11278 pubKeyHash: 0x7f,
ebd8d4e8 11279 scriptHash: 0xc4,
ab78acc6
IC
11280 wif: 0xff,
11281 dustThreshold: 560,
11282 dustSoftThreshold: 100000,
11283 feePerKb: 100000,
11284 estimateFee: estimateFee('viacointestnet')
11285 },
11286 gamerscoin: {
11287 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11288 bip32: {
11289 public: 0x019da462,
11290 private: 0x019d9cfe
11291 },
11292 pubKeyHash: 0x26,
11293 scriptHash: 0x05,
11294 wif: 0xA6,
11295 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11296 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11297 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11298 estimateFee: estimateFee('gamerscoin')
11299 },
11300 jumbucks: {
11301 magicPrefix: '\x19Jumbucks Signed Message:\n',
11302 bip32: {
11303 public: 0x037a689a,
11304 private: 0x037a6460
11305 },
11306 pubKeyHash: 0x2b,
11307 scriptHash: 0x05,
11308 wif: 0xab,
11309 dustThreshold: 0,
11310 dustSoftThreshold: 10000,
ebd8d4e8 11311 feePerKb: 10000,
ab78acc6
IC
11312 estimateFee: estimateFee('jumbucks')
11313 },
11314 zetacoin: {
11315 magicPrefix: '\x18Zetacoin Signed Message:\n',
11316 bip32: {
11317 public: 0x0488b21e,
11318 private: 0x0488ade4
11319 },
11320 pubKeyHash: 0x50,
11321 scriptHash: 0x09,
11322 wif: 0xe0,
11323 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11324 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11325 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11326 }
11327}
11328
ab78acc6
IC
11329function estimateFee (type) {
11330 return function (tx) {
ebd8d4e8
IC
11331 var network = networks[type]
11332 var baseFee = network.feePerKb
11333 var byteSize = tx.toBuffer().length
11334
11335 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11336 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11337
ab78acc6 11338 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11339 if (e.value < network.dustSoftThreshold) {
11340 fee += baseFee
11341 }
11342 })
11343
11344 return fee
11345 }
11346}
11347
11348module.exports = networks
11349
ab78acc6 11350},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11351module.exports = {
11352 // push value
ab78acc6
IC
11353 OP_FALSE: 0,
11354 OP_0: 0,
11355 OP_PUSHDATA1: 76,
11356 OP_PUSHDATA2: 77,
11357 OP_PUSHDATA4: 78,
11358 OP_1NEGATE: 79,
11359 OP_RESERVED: 80,
11360 OP_1: 81,
11361 OP_TRUE: 81,
11362 OP_2: 82,
11363 OP_3: 83,
11364 OP_4: 84,
11365 OP_5: 85,
11366 OP_6: 86,
11367 OP_7: 87,
11368 OP_8: 88,
11369 OP_9: 89,
11370 OP_10: 90,
11371 OP_11: 91,
11372 OP_12: 92,
11373 OP_13: 93,
11374 OP_14: 94,
11375 OP_15: 95,
11376 OP_16: 96,
ebd8d4e8
IC
11377
11378 // control
ab78acc6
IC
11379 OP_NOP: 97,
11380 OP_VER: 98,
11381 OP_IF: 99,
11382 OP_NOTIF: 100,
11383 OP_VERIF: 101,
11384 OP_VERNOTIF: 102,
11385 OP_ELSE: 103,
11386 OP_ENDIF: 104,
11387 OP_VERIFY: 105,
11388 OP_RETURN: 106,
ebd8d4e8
IC
11389
11390 // stack ops
ab78acc6
IC
11391 OP_TOALTSTACK: 107,
11392 OP_FROMALTSTACK: 108,
11393 OP_2DROP: 109,
11394 OP_2DUP: 110,
11395 OP_3DUP: 111,
11396 OP_2OVER: 112,
11397 OP_2ROT: 113,
11398 OP_2SWAP: 114,
11399 OP_IFDUP: 115,
11400 OP_DEPTH: 116,
11401 OP_DROP: 117,
11402 OP_DUP: 118,
11403 OP_NIP: 119,
11404 OP_OVER: 120,
11405 OP_PICK: 121,
11406 OP_ROLL: 122,
11407 OP_ROT: 123,
11408 OP_SWAP: 124,
11409 OP_TUCK: 125,
ebd8d4e8
IC
11410
11411 // splice ops
ab78acc6
IC
11412 OP_CAT: 126,
11413 OP_SUBSTR: 127,
11414 OP_LEFT: 128,
11415 OP_RIGHT: 129,
11416 OP_SIZE: 130,
ebd8d4e8
IC
11417
11418 // bit logic
ab78acc6
IC
11419 OP_INVERT: 131,
11420 OP_AND: 132,
11421 OP_OR: 133,
11422 OP_XOR: 134,
11423 OP_EQUAL: 135,
11424 OP_EQUALVERIFY: 136,
11425 OP_RESERVED1: 137,
11426 OP_RESERVED2: 138,
ebd8d4e8
IC
11427
11428 // numeric
ab78acc6
IC
11429 OP_1ADD: 139,
11430 OP_1SUB: 140,
11431 OP_2MUL: 141,
11432 OP_2DIV: 142,
11433 OP_NEGATE: 143,
11434 OP_ABS: 144,
11435 OP_NOT: 145,
11436 OP_0NOTEQUAL: 146,
11437
11438 OP_ADD: 147,
11439 OP_SUB: 148,
11440 OP_MUL: 149,
11441 OP_DIV: 150,
11442 OP_MOD: 151,
11443 OP_LSHIFT: 152,
11444 OP_RSHIFT: 153,
11445
11446 OP_BOOLAND: 154,
11447 OP_BOOLOR: 155,
11448 OP_NUMEQUAL: 156,
11449 OP_NUMEQUALVERIFY: 157,
11450 OP_NUMNOTEQUAL: 158,
11451 OP_LESSTHAN: 159,
11452 OP_GREATERTHAN: 160,
11453 OP_LESSTHANOREQUAL: 161,
11454 OP_GREATERTHANOREQUAL: 162,
11455 OP_MIN: 163,
11456 OP_MAX: 164,
11457
11458 OP_WITHIN: 165,
ebd8d4e8
IC
11459
11460 // crypto
ab78acc6
IC
11461 OP_RIPEMD160: 166,
11462 OP_SHA1: 167,
11463 OP_SHA256: 168,
11464 OP_HASH160: 169,
11465 OP_HASH256: 170,
11466 OP_CODESEPARATOR: 171,
11467 OP_CHECKSIG: 172,
11468 OP_CHECKSIGVERIFY: 173,
11469 OP_CHECKMULTISIG: 174,
11470 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11471
11472 // expansion
ab78acc6
IC
11473 OP_NOP1: 176,
11474 OP_NOP2: 177,
11475 OP_NOP3: 178,
11476 OP_NOP4: 179,
11477 OP_NOP5: 180,
11478 OP_NOP6: 181,
11479 OP_NOP7: 182,
11480 OP_NOP8: 183,
11481 OP_NOP9: 184,
11482 OP_NOP10: 185,
ebd8d4e8
IC
11483
11484 // template matching params
ab78acc6
IC
11485 OP_PUBKEYHASH: 253,
11486 OP_PUBKEY: 254,
11487 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11488}
11489
ab78acc6 11490},{}],68:[function(require,module,exports){
ebd8d4e8 11491(function (Buffer){
ab78acc6
IC
11492var assert = require('assert')
11493var bufferutils = require('./bufferutils')
11494var crypto = require('./crypto')
11495var typeForce = require('typeforce')
11496var opcodes = require('./opcodes')
ebd8d4e8 11497
ab78acc6
IC
11498function Script (buffer, chunks) {
11499 typeForce('Buffer', buffer)
11500 typeForce('Array', chunks)
ebd8d4e8
IC
11501
11502 this.buffer = buffer
11503 this.chunks = chunks
11504}
11505
ab78acc6 11506Script.fromASM = function (asm) {
ebd8d4e8 11507 var strChunks = asm.split(' ')
ab78acc6
IC
11508 var chunks = strChunks.map(function (strChunk) {
11509 // opcode
ebd8d4e8
IC
11510 if (strChunk in opcodes) {
11511 return opcodes[strChunk]
11512
ab78acc6 11513 // data chunk
ebd8d4e8
IC
11514 } else {
11515 return new Buffer(strChunk, 'hex')
11516 }
11517 })
11518
11519 return Script.fromChunks(chunks)
11520}
11521
ab78acc6 11522Script.fromBuffer = function (buffer) {
ebd8d4e8 11523 var chunks = []
ebd8d4e8
IC
11524 var i = 0
11525
11526 while (i < buffer.length) {
11527 var opcode = buffer.readUInt8(i)
11528
ab78acc6 11529 // data chunk
ebd8d4e8
IC
11530 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11531 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11532
11533 // did reading a pushDataInt fail? return non-chunked script
11534 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11535 i += d.size
11536
ab78acc6
IC
11537 // attempt to read too much data?
11538 if (i + d.number > buffer.length) return new Script(buffer, [])
11539
ebd8d4e8
IC
11540 var data = buffer.slice(i, i + d.number)
11541 i += d.number
11542
11543 chunks.push(data)
11544
ab78acc6 11545 // opcode
ebd8d4e8
IC
11546 } else {
11547 chunks.push(opcode)
11548
11549 i += 1
11550 }
11551 }
11552
11553 return new Script(buffer, chunks)
11554}
11555
ab78acc6
IC
11556Script.fromChunks = function (chunks) {
11557 typeForce('Array', chunks)
ebd8d4e8 11558
ab78acc6
IC
11559 var bufferSize = chunks.reduce(function (accum, chunk) {
11560 // data chunk
ebd8d4e8
IC
11561 if (Buffer.isBuffer(chunk)) {
11562 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11563 }
11564
ab78acc6 11565 // opcode
ebd8d4e8
IC
11566 return accum + 1
11567 }, 0.0)
11568
11569 var buffer = new Buffer(bufferSize)
11570 var offset = 0
11571
ab78acc6
IC
11572 chunks.forEach(function (chunk) {
11573 // data chunk
ebd8d4e8
IC
11574 if (Buffer.isBuffer(chunk)) {
11575 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11576
11577 chunk.copy(buffer, offset)
11578 offset += chunk.length
11579
ab78acc6 11580 // opcode
ebd8d4e8
IC
11581 } else {
11582 buffer.writeUInt8(chunk, offset)
11583 offset += 1
11584 }
11585 })
11586
11587 assert.equal(offset, buffer.length, 'Could not decode chunks')
11588 return new Script(buffer, chunks)
11589}
11590
ab78acc6 11591Script.fromHex = function (hex) {
ebd8d4e8
IC
11592 return Script.fromBuffer(new Buffer(hex, 'hex'))
11593}
11594
ebd8d4e8
IC
11595Script.EMPTY = Script.fromChunks([])
11596
ab78acc6 11597Script.prototype.getHash = function () {
ebd8d4e8
IC
11598 return crypto.hash160(this.buffer)
11599}
11600
11601// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11602Script.prototype.without = function (needle) {
11603 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11604 return op !== needle
11605 }))
11606}
11607
ebd8d4e8
IC
11608var reverseOps = []
11609for (var op in opcodes) {
11610 var code = opcodes[op]
11611 reverseOps[code] = op
11612}
11613
ab78acc6
IC
11614Script.prototype.toASM = function () {
11615 return this.chunks.map(function (chunk) {
11616 // data chunk
ebd8d4e8
IC
11617 if (Buffer.isBuffer(chunk)) {
11618 return chunk.toString('hex')
11619
ab78acc6 11620 // opcode
ebd8d4e8
IC
11621 } else {
11622 return reverseOps[chunk]
11623 }
11624 }).join(' ')
11625}
11626
ab78acc6 11627Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11628 return this.buffer
11629}
11630
ab78acc6 11631Script.prototype.toHex = function () {
ebd8d4e8
IC
11632 return this.toBuffer().toString('hex')
11633}
11634
11635module.exports = Script
11636
ab78acc6
IC
11637}).call(this,require("buffer").Buffer)
11638},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11639(function (Buffer){
ab78acc6
IC
11640var assert = require('assert')
11641var ops = require('./opcodes')
11642var typeForce = require('typeforce')
ebd8d4e8 11643
ab78acc6 11644var ecurve = require('ecurve')
ebd8d4e8
IC
11645var curve = ecurve.getCurveByName('secp256k1')
11646
ab78acc6
IC
11647var ECSignature = require('./ecsignature')
11648var Script = require('./script')
ebd8d4e8 11649
ab78acc6 11650function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11651 if (!Buffer.isBuffer(buffer)) return false
11652
11653 try {
ebd8d4e8
IC
11654 ecurve.Point.decodeFrom(curve, buffer)
11655 } catch (e) {
ab78acc6
IC
11656 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11657 throw e
ebd8d4e8
IC
11658
11659 return false
11660 }
11661
11662 return true
11663}
11664
ab78acc6 11665function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11666 if (!Buffer.isBuffer(buffer)) return false
11667
11668 try {
11669 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11670 } catch (e) {
11671 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
11672 throw e
11673 }
ebd8d4e8
IC
11674
11675 return false
11676 }
11677
11678 return true
11679}
11680
ab78acc6
IC
11681function isPubKeyHashInput (script) {
11682 return script.chunks.length === 2 &&
11683 isCanonicalSignature(script.chunks[0]) &&
11684 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11685}
11686
ab78acc6
IC
11687function isPubKeyHashOutput (script) {
11688 return script.chunks.length === 5 &&
11689 script.chunks[0] === ops.OP_DUP &&
11690 script.chunks[1] === ops.OP_HASH160 &&
11691 Buffer.isBuffer(script.chunks[2]) &&
11692 script.chunks[2].length === 20 &&
11693 script.chunks[3] === ops.OP_EQUALVERIFY &&
11694 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11695}
11696
ab78acc6
IC
11697function isPubKeyInput (script) {
11698 return script.chunks.length === 1 &&
11699 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11700}
11701
ab78acc6
IC
11702function isPubKeyOutput (script) {
11703 return script.chunks.length === 2 &&
11704 isCanonicalPubKey(script.chunks[0]) &&
11705 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11706}
11707
ab78acc6
IC
11708function isScriptHashInput (script, allowIncomplete) {
11709 if (script.chunks.length < 2) return false
ebd8d4e8 11710
ab78acc6 11711 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11712 if (!Buffer.isBuffer(lastChunk)) return false
11713
ab78acc6
IC
11714 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11715 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11716
ab78acc6
IC
11717 // is redeemScript a valid script?
11718 if (redeemScript.chunks.length === 0) return false
11719
11720 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11721}
11722
ab78acc6
IC
11723function isScriptHashOutput (script) {
11724 return script.chunks.length === 3 &&
11725 script.chunks[0] === ops.OP_HASH160 &&
11726 Buffer.isBuffer(script.chunks[1]) &&
11727 script.chunks[1].length === 20 &&
11728 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11729}
11730
ab78acc6
IC
11731// allowIncomplete is to account for combining signatures
11732// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11733function isMultisigInput (script, allowIncomplete) {
11734 if (script.chunks.length < 2) return false
11735 if (script.chunks[0] !== ops.OP_0) return false
11736
11737 if (allowIncomplete) {
11738 return script.chunks.slice(1).every(function (chunk) {
11739 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11740 })
11741 }
11742
11743 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11744}
11745
ab78acc6
IC
11746function isMultisigOutput (script) {
11747 if (script.chunks.length < 4) return false
11748 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11749
ab78acc6
IC
11750 var mOp = script.chunks[0]
11751 if (mOp === ops.OP_0) return false
11752 if (mOp < ops.OP_1) return false
11753 if (mOp > ops.OP_16) return false
ebd8d4e8 11754
ab78acc6
IC
11755 var nOp = script.chunks[script.chunks.length - 2]
11756 if (nOp === ops.OP_0) return false
11757 if (nOp < ops.OP_1) return false
11758 if (nOp > ops.OP_16) return false
ebd8d4e8 11759
ab78acc6
IC
11760 var m = mOp - (ops.OP_1 - 1)
11761 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11762 if (n < m) return false
11763
ab78acc6 11764 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
11765 if (n < pubKeys.length) return false
11766
11767 return pubKeys.every(isCanonicalPubKey)
11768}
11769
ab78acc6
IC
11770function isNullDataOutput (script) {
11771 return script.chunks[0] === ops.OP_RETURN
11772}
11773
11774function classifyOutput (script) {
11775 typeForce('Script', script)
11776
11777 if (isPubKeyHashOutput(script)) {
11778 return 'pubkeyhash'
11779 } else if (isScriptHashOutput(script)) {
11780 return 'scripthash'
11781 } else if (isMultisigOutput(script)) {
11782 return 'multisig'
11783 } else if (isPubKeyOutput(script)) {
11784 return 'pubkey'
11785 } else if (isNullDataOutput(script)) {
11786 return 'nulldata'
11787 }
11788
11789 return 'nonstandard'
11790}
11791
11792function classifyInput (script, allowIncomplete) {
11793 typeForce('Script', script)
11794
11795 if (isPubKeyHashInput(script)) {
11796 return 'pubkeyhash'
11797 } else if (isMultisigInput(script, allowIncomplete)) {
11798 return 'multisig'
11799 } else if (isScriptHashInput(script, allowIncomplete)) {
11800 return 'scripthash'
11801 } else if (isPubKeyInput(script)) {
11802 return 'pubkey'
11803 }
11804
11805 return 'nonstandard'
ebd8d4e8
IC
11806}
11807
11808// Standard Script Templates
11809// {pubKey} OP_CHECKSIG
ab78acc6 11810function pubKeyOutput (pubKey) {
ebd8d4e8
IC
11811 return Script.fromChunks([
11812 pubKey.toBuffer(),
ab78acc6 11813 ops.OP_CHECKSIG
ebd8d4e8
IC
11814 ])
11815}
11816
11817// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
11818function pubKeyHashOutput (hash) {
11819 typeForce('Buffer', hash)
ebd8d4e8
IC
11820
11821 return Script.fromChunks([
ab78acc6
IC
11822 ops.OP_DUP,
11823 ops.OP_HASH160,
ebd8d4e8 11824 hash,
ab78acc6
IC
11825 ops.OP_EQUALVERIFY,
11826 ops.OP_CHECKSIG
ebd8d4e8
IC
11827 ])
11828}
11829
11830// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
11831function scriptHashOutput (hash) {
11832 typeForce('Buffer', hash)
ebd8d4e8
IC
11833
11834 return Script.fromChunks([
ab78acc6 11835 ops.OP_HASH160,
ebd8d4e8 11836 hash,
ab78acc6 11837 ops.OP_EQUAL
ebd8d4e8
IC
11838 ])
11839}
11840
11841// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
11842function multisigOutput (m, pubKeys) {
11843 typeForce(['ECPubKey'], pubKeys)
11844
ebd8d4e8
IC
11845 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11846
ab78acc6 11847 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
11848 return pubKey.toBuffer()
11849 })
11850 var n = pubKeys.length
11851
11852 return Script.fromChunks([].concat(
ab78acc6 11853 (ops.OP_1 - 1) + m,
ebd8d4e8 11854 pubKeyBuffers,
ab78acc6
IC
11855 (ops.OP_1 - 1) + n,
11856 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
11857 ))
11858}
11859
11860// {signature}
ab78acc6
IC
11861function pubKeyInput (signature) {
11862 typeForce('Buffer', signature)
ebd8d4e8
IC
11863
11864 return Script.fromChunks([signature])
11865}
11866
11867// {signature} {pubKey}
ab78acc6
IC
11868function pubKeyHashInput (signature, pubKey) {
11869 typeForce('Buffer', signature)
ebd8d4e8
IC
11870
11871 return Script.fromChunks([signature, pubKey.toBuffer()])
11872}
11873
11874// <scriptSig> {serialized scriptPubKey script}
ab78acc6 11875function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
11876 return Script.fromChunks([].concat(
11877 scriptSig.chunks,
11878 scriptPubKey.toBuffer()
11879 ))
11880}
11881
11882// OP_0 [signatures ...]
ab78acc6 11883function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 11884 if (scriptPubKey) {
ab78acc6
IC
11885 assert(isMultisigOutput(scriptPubKey))
11886
11887 var mOp = scriptPubKey.chunks[0]
11888 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11889 var m = mOp - (ops.OP_1 - 1)
11890 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 11891
ab78acc6
IC
11892 assert(signatures.length >= m, 'Not enough signatures provided')
11893 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
11894 }
11895
ab78acc6
IC
11896 return Script.fromChunks([].concat(ops.OP_0, signatures))
11897}
11898
11899function nullDataOutput (data) {
11900 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
11901}
11902
11903module.exports = {
ab78acc6
IC
11904 isCanonicalPubKey: isCanonicalPubKey,
11905 isCanonicalSignature: isCanonicalSignature,
11906 isPubKeyHashInput: isPubKeyHashInput,
11907 isPubKeyHashOutput: isPubKeyHashOutput,
11908 isPubKeyInput: isPubKeyInput,
11909 isPubKeyOutput: isPubKeyOutput,
11910 isScriptHashInput: isScriptHashInput,
11911 isScriptHashOutput: isScriptHashOutput,
11912 isMultisigInput: isMultisigInput,
11913 isMultisigOutput: isMultisigOutput,
11914 isNullDataOutput: isNullDataOutput,
ebd8d4e8 11915 classifyOutput: classifyOutput,
ab78acc6
IC
11916 classifyInput: classifyInput,
11917 pubKeyOutput: pubKeyOutput,
ebd8d4e8 11918 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
11919 scriptHashOutput: scriptHashOutput,
11920 multisigOutput: multisigOutput,
ebd8d4e8 11921 pubKeyInput: pubKeyInput,
ab78acc6 11922 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 11923 scriptHashInput: scriptHashInput,
ab78acc6
IC
11924 multisigInput: multisigInput,
11925 dataOutput: function (data) {
11926 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11927 return nullDataOutput(data)
11928 },
11929 nullDataOutput: nullDataOutput
ebd8d4e8
IC
11930}
11931
ab78acc6
IC
11932}).call(this,require("buffer").Buffer)
11933},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 11934(function (Buffer){
ab78acc6
IC
11935var assert = require('assert')
11936var bufferutils = require('./bufferutils')
11937var crypto = require('./crypto')
11938var typeForce = require('typeforce')
11939var opcodes = require('./opcodes')
11940var scripts = require('./scripts')
11941
11942var Address = require('./address')
11943var ECSignature = require('./ecsignature')
11944var Script = require('./script')
11945
11946function Transaction () {
11947 this.version = 1
11948 this.locktime = 0
11949 this.ins = []
11950 this.outs = []
11951}
ebd8d4e8
IC
11952
11953Transaction.DEFAULT_SEQUENCE = 0xffffffff
11954Transaction.SIGHASH_ALL = 0x01
11955Transaction.SIGHASH_NONE = 0x02
11956Transaction.SIGHASH_SINGLE = 0x03
11957Transaction.SIGHASH_ANYONECANPAY = 0x80
11958
ab78acc6
IC
11959Transaction.fromBuffer = function (buffer, __disableAssert) {
11960 var offset = 0
11961 function readSlice (n) {
11962 offset += n
11963 return buffer.slice(offset - n, offset)
11964 }
11965
11966 function readUInt32 () {
11967 var i = buffer.readUInt32LE(offset)
11968 offset += 4
11969 return i
11970 }
11971
11972 function readUInt64 () {
11973 var i = bufferutils.readUInt64LE(buffer, offset)
11974 offset += 8
11975 return i
11976 }
11977
11978 function readVarInt () {
11979 var vi = bufferutils.readVarInt(buffer, offset)
11980 offset += vi.size
11981 return vi.number
11982 }
11983
11984 function readScript () {
11985 return Script.fromBuffer(readSlice(readVarInt()))
11986 }
11987
11988 function readGenerationScript () {
11989 return new Script(readSlice(readVarInt()), [])
11990 }
11991
11992 var tx = new Transaction()
11993 tx.version = readUInt32()
11994
11995 var vinLen = readVarInt()
11996 for (var i = 0; i < vinLen; ++i) {
11997 var hash = readSlice(32)
11998
11999 if (Transaction.isCoinbaseHash(hash)) {
12000 tx.ins.push({
12001 hash: hash,
12002 index: readUInt32(),
12003 script: readGenerationScript(),
12004 sequence: readUInt32()
12005 })
12006 } else {
12007 tx.ins.push({
12008 hash: hash,
12009 index: readUInt32(),
12010 script: readScript(),
12011 sequence: readUInt32()
12012 })
12013 }
12014 }
12015
12016 var voutLen = readVarInt()
12017 for (i = 0; i < voutLen; ++i) {
12018 tx.outs.push({
12019 value: readUInt64(),
12020 script: readScript()
12021 })
12022 }
12023
12024 tx.locktime = readUInt32()
12025
12026 if (!__disableAssert) {
12027 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12028 }
12029
12030 return tx
12031}
12032
12033Transaction.fromHex = function (hex) {
12034 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12035}
12036
12037Transaction.isCoinbaseHash = function (buffer) {
12038 return Array.prototype.every.call(buffer, function (x) {
12039 return x === 0
12040 })
ebd8d4e8
IC
12041}
12042
12043/**
ab78acc6 12044 * Create a new txIn.
ebd8d4e8
IC
12045 *
12046 * Can be called with any of:
12047 *
12048 * - A transaction and an index
12049 * - A transaction hash and an index
12050 *
12051 * Note that this method does not sign the created input.
12052 */
ab78acc6
IC
12053Transaction.prototype.addInput = function (hash, index, sequence, script) {
12054 if (sequence === undefined || sequence === null) {
12055 sequence = Transaction.DEFAULT_SEQUENCE
12056 }
ebd8d4e8 12057
ab78acc6 12058 script = script || Script.EMPTY
ebd8d4e8 12059
ab78acc6 12060 if (typeof hash === 'string') {
ebd8d4e8 12061 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12062 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12063 } else if (hash instanceof Transaction) {
12064 hash = hash.getHash()
ebd8d4e8
IC
12065 }
12066
ab78acc6
IC
12067 typeForce('Buffer', hash)
12068 typeForce('Number', index)
12069 typeForce('Number', sequence)
12070 typeForce('Script', script)
12071
ebd8d4e8 12072 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12073
ab78acc6 12074 // Add the input and return the input's index
ebd8d4e8
IC
12075 return (this.ins.push({
12076 hash: hash,
12077 index: index,
ab78acc6 12078 script: script,
ebd8d4e8
IC
12079 sequence: sequence
12080 }) - 1)
12081}
12082
12083/**
ab78acc6 12084 * Create a new txOut.
ebd8d4e8
IC
12085 *
12086 * Can be called with:
12087 *
12088 * - A base58 address string and a value
12089 * - An Address object and a value
12090 * - A scriptPubKey Script and a value
12091 */
ab78acc6 12092Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12093 // Attempt to get a valid address if it's a base58 address string
12094 if (typeof scriptPubKey === 'string') {
12095 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12096 }
12097
12098 // Attempt to get a valid script if it's an Address object
12099 if (scriptPubKey instanceof Address) {
ab78acc6 12100 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12101 }
12102
ab78acc6
IC
12103 typeForce('Script', scriptPubKey)
12104 typeForce('Number', value)
12105
12106 // Add the output and return the output's index
ebd8d4e8
IC
12107 return (this.outs.push({
12108 script: scriptPubKey,
ab78acc6 12109 value: value
ebd8d4e8
IC
12110 }) - 1)
12111}
12112
ab78acc6
IC
12113Transaction.prototype.clone = function () {
12114 var newTx = new Transaction()
12115 newTx.version = this.version
12116 newTx.locktime = this.locktime
12117
12118 newTx.ins = this.ins.map(function (txIn) {
12119 return {
12120 hash: txIn.hash,
12121 index: txIn.index,
12122 script: txIn.script,
12123 sequence: txIn.sequence
12124 }
12125 })
12126
12127 newTx.outs = this.outs.map(function (txOut) {
12128 return {
12129 script: txOut.script,
12130 value: txOut.value
12131 }
12132 })
12133
12134 return newTx
12135}
12136
12137/**
12138 * Hash transaction for signing a specific input.
12139 *
12140 * Bitcoin uses a different hash for each signed transaction input. This
12141 * method copies the transaction, makes the necessary changes based on the
12142 * hashType, serializes and finally hashes the result. This hash can then be
12143 * used to sign the transaction input in question.
12144 */
12145Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12146 // FIXME: remove in 2.x.y
12147 if (arguments[0] instanceof Script) {
12148 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12149
12150 // swap the arguments (must be stored in tmp, arguments is special)
12151 var tmp = arguments[0]
12152 inIndex = arguments[1]
12153 prevOutScript = tmp
12154 }
12155
12156 typeForce('Number', inIndex)
12157 typeForce('Script', prevOutScript)
12158 typeForce('Number', hashType)
12159
12160 assert(inIndex >= 0, 'Invalid vin index')
12161 assert(inIndex < this.ins.length, 'Invalid vin index')
12162
12163 var txTmp = this.clone()
12164 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12165
12166 // Blank out other inputs' signatures
12167 txTmp.ins.forEach(function (txIn) {
12168 txIn.script = Script.EMPTY
12169 })
12170 txTmp.ins[inIndex].script = hashScript
12171
12172 var hashTypeModifier = hashType & 0x1f
12173
12174 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12175 assert(false, 'SIGHASH_NONE not yet supported')
12176 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12177 assert(false, 'SIGHASH_SINGLE not yet supported')
12178 }
12179
12180 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12181 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12182 }
12183
12184 var hashTypeBuffer = new Buffer(4)
12185 hashTypeBuffer.writeInt32LE(hashType, 0)
12186
12187 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12188 return crypto.hash256(buffer)
12189}
12190
12191Transaction.prototype.getHash = function () {
12192 return crypto.hash256(this.toBuffer())
12193}
12194
12195Transaction.prototype.getId = function () {
12196 // TxHash is little-endian, we need big-endian
12197 return bufferutils.reverse(this.getHash()).toString('hex')
12198}
12199
ebd8d4e8 12200Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12201 function scriptSize (script) {
12202 var length = script.buffer.length
ebd8d4e8 12203
ab78acc6
IC
12204 return bufferutils.varIntSize(length) + length
12205 }
ebd8d4e8
IC
12206
12207 var buffer = new Buffer(
12208 8 +
12209 bufferutils.varIntSize(this.ins.length) +
12210 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12211 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12212 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12213 )
12214
12215 var offset = 0
ab78acc6 12216 function writeSlice (slice) {
ebd8d4e8
IC
12217 slice.copy(buffer, offset)
12218 offset += slice.length
12219 }
ab78acc6
IC
12220
12221 function writeUInt32 (i) {
ebd8d4e8
IC
12222 buffer.writeUInt32LE(i, offset)
12223 offset += 4
12224 }
ab78acc6
IC
12225
12226 function writeUInt64 (i) {
ebd8d4e8
IC
12227 bufferutils.writeUInt64LE(buffer, i, offset)
12228 offset += 8
12229 }
ab78acc6
IC
12230
12231 function writeVarInt (i) {
ebd8d4e8
IC
12232 var n = bufferutils.writeVarInt(buffer, i, offset)
12233 offset += n
12234 }
12235
12236 writeUInt32(this.version)
12237 writeVarInt(this.ins.length)
12238
ab78acc6
IC
12239 this.ins.forEach(function (txIn) {
12240 writeSlice(txIn.hash)
12241 writeUInt32(txIn.index)
12242 writeVarInt(txIn.script.buffer.length)
12243 writeSlice(txIn.script.buffer)
12244 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12245 })
12246
12247 writeVarInt(this.outs.length)
ab78acc6
IC
12248 this.outs.forEach(function (txOut) {
12249 writeUInt64(txOut.value)
12250 writeVarInt(txOut.script.buffer.length)
12251 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12252 })
12253
12254 writeUInt32(this.locktime)
12255
12256 return buffer
12257}
12258
ab78acc6 12259Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12260 return this.toBuffer().toString('hex')
12261}
12262
ab78acc6
IC
12263Transaction.prototype.setInputScript = function (index, script) {
12264 typeForce('Number', index)
12265 typeForce('Script', script)
12266
12267 this.ins[index].script = script
12268}
12269
12270// FIXME: remove in 2.x.y
12271Transaction.prototype.sign = function (index, privKey, hashType) {
12272 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12273
12274 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12275 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12276
12277 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12278 this.setInputScript(index, scriptSig)
12279}
12280
12281// FIXME: remove in 2.x.y
12282Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12283 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12284
12285 hashType = hashType || Transaction.SIGHASH_ALL
12286
12287 var hash = this.hashForSignature(index, prevOutScript, hashType)
12288 var signature = privKey.sign(hash)
12289
12290 return signature.toScriptSignature(hashType)
12291}
12292
12293// FIXME: remove in 2.x.y
12294Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12295 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12296
12297 var parsed = ECSignature.parseScriptSignature(buffer)
12298 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12299
12300 return pubKey.verify(hash, parsed.signature)
12301}
12302
12303module.exports = Transaction
12304
12305}).call(this,require("buffer").Buffer)
12306},{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
12307(function (Buffer){
12308var assert = require('assert')
12309var ops = require('./opcodes')
12310var scripts = require('./scripts')
12311
12312var ECPubKey = require('./ecpubkey')
12313var ECSignature = require('./ecsignature')
12314var Script = require('./script')
12315var Transaction = require('./transaction')
12316
12317function extractInput (txIn) {
12318 var redeemScript
12319 var scriptSig = txIn.script
12320 var prevOutScript
12321 var prevOutType = scripts.classifyInput(scriptSig, true)
12322 var scriptType
12323
12324 // Re-classify if scriptHash
12325 if (prevOutType === 'scripthash') {
12326 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12327 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12328
12329 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12330 scriptType = scripts.classifyInput(scriptSig, true)
12331 } else {
12332 scriptType = prevOutType
12333 }
12334
12335 // Extract hashType, pubKeys and signatures
12336 var hashType, parsed, pubKeys, signatures
12337
12338 switch (scriptType) {
12339 case 'pubkeyhash': {
12340 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12341 hashType = parsed.hashType
12342 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12343 signatures = [parsed.signature]
12344 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12345
12346 break
12347 }
12348
12349 case 'pubkey': {
12350 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12351 hashType = parsed.hashType
12352 signatures = [parsed.signature]
12353
12354 if (redeemScript) {
12355 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12356 }
12357
12358 break
12359 }
12360
12361 case 'multisig': {
12362 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12363 if (chunk === ops.OP_0) return chunk
12364
12365 var parsed = ECSignature.parseScriptSignature(chunk)
12366 hashType = parsed.hashType
12367
12368 return parsed.signature
12369 })
12370
12371 if (redeemScript) {
12372 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12373 }
12374
12375 break
12376 }
12377 }
12378
12379 return {
12380 hashType: hashType,
12381 prevOutScript: prevOutScript,
12382 prevOutType: prevOutType,
12383 pubKeys: pubKeys,
12384 redeemScript: redeemScript,
12385 scriptType: scriptType,
12386 signatures: signatures
12387 }
12388}
12389
12390function TransactionBuilder () {
12391 this.prevTxMap = {}
12392 this.prevOutScripts = {}
12393 this.prevOutTypes = {}
12394
12395 this.inputs = []
12396 this.tx = new Transaction()
12397}
12398
12399TransactionBuilder.fromTransaction = function (transaction) {
12400 var txb = new TransactionBuilder()
12401
12402 // Copy other transaction fields
12403 txb.tx.version = transaction.version
12404 txb.tx.locktime = transaction.locktime
12405
12406 // Extract/add inputs
12407 transaction.ins.forEach(function (txIn) {
12408 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12409 })
12410
12411 // Extract/add outputs
12412 transaction.outs.forEach(function (txOut) {
12413 txb.addOutput(txOut.script, txOut.value)
12414 })
12415
12416 // Extract/add signatures
12417 txb.inputs = transaction.ins.map(function (txIn) {
12418 // TODO: remove me after testcase added
12419 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12420
12421 // Ignore empty scripts
12422 if (txIn.script.buffer.length === 0) return {}
12423
12424 return extractInput(txIn)
12425 })
12426
12427 return txb
12428}
12429
12430TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12431 var prevOutHash
12432
12433 // txId
12434 if (typeof prevTx === 'string') {
12435 prevOutHash = new Buffer(prevTx, 'hex')
12436
12437 // TxId hex is big-endian, we want little-endian hash
12438 Array.prototype.reverse.call(prevOutHash)
12439
12440 // Transaction
12441 } else if (prevTx instanceof Transaction) {
12442 prevOutHash = prevTx.getHash()
12443 prevOutScript = prevTx.outs[index].script
12444
12445 // txHash
12446 } else {
12447 prevOutHash = prevTx
12448 }
12449
12450 var input = {}
12451 if (prevOutScript) {
12452 var prevOutType = scripts.classifyOutput(prevOutScript)
12453
12454 // if we can, extract pubKey information
12455 switch (prevOutType) {
12456 case 'multisig': {
12457 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12458 break
12459 }
12460
12461 case 'pubkey': {
12462 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12463 break
12464 }
12465 }
12466
12467 if (prevOutType !== 'scripthash') {
12468 input.scriptType = prevOutType
12469 }
12470
12471 input.prevOutScript = prevOutScript
12472 input.prevOutType = prevOutType
12473 }
12474
12475 assert(this.inputs.every(function (input2) {
12476 if (input2.hashType === undefined) return true
12477
12478 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12479 }), 'No, this would invalidate signatures')
12480
12481 var prevOut = prevOutHash.toString('hex') + ':' + index
12482 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12483
12484 var vin = this.tx.addInput(prevOutHash, index, sequence)
12485 this.inputs[vin] = input
12486 this.prevTxMap[prevOut] = vin
12487
12488 return vin
12489}
12490
12491TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12492 assert(this.inputs.every(function (input) {
12493 if (input.hashType === undefined) return true
ebd8d4e8 12494
ab78acc6
IC
12495 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12496 }), 'No, this would invalidate signatures')
ebd8d4e8 12497
ab78acc6
IC
12498 return this.tx.addOutput(scriptPubKey, value)
12499}
ebd8d4e8 12500
ab78acc6
IC
12501TransactionBuilder.prototype.build = function () {
12502 return this.__build(false)
12503}
12504TransactionBuilder.prototype.buildIncomplete = function () {
12505 return this.__build(true)
12506}
ebd8d4e8 12507
ab78acc6
IC
12508var canSignTypes = {
12509 'pubkeyhash': true,
12510 'multisig': true,
12511 'pubkey': true
12512}
ebd8d4e8 12513
ab78acc6
IC
12514TransactionBuilder.prototype.__build = function (allowIncomplete) {
12515 if (!allowIncomplete) {
12516 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12517 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12518 }
12519
ab78acc6 12520 var tx = this.tx.clone()
ebd8d4e8 12521
ab78acc6
IC
12522 // Create script signatures from signature meta-data
12523 this.inputs.forEach(function (input, index) {
12524 var scriptType = input.scriptType
12525 var scriptSig
ebd8d4e8 12526
ab78acc6
IC
12527 if (!allowIncomplete) {
12528 assert(!!scriptType, 'Transaction is not complete')
12529 assert(scriptType in canSignTypes, scriptType + ' not supported')
12530 assert(input.signatures, 'Transaction is missing signatures')
12531 }
ebd8d4e8 12532
ab78acc6
IC
12533 if (input.signatures) {
12534 switch (scriptType) {
12535 case 'pubkeyhash': {
12536 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12537 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12538 break
12539 }
ebd8d4e8 12540
ab78acc6
IC
12541 case 'multisig': {
12542 // Array.prototype.map is sparse-compatible
12543 var msSignatures = input.signatures.map(function (signature) {
12544 return signature && signature.toScriptSignature(input.hashType)
12545 })
ebd8d4e8 12546
ab78acc6
IC
12547 // fill in blanks with OP_0
12548 if (allowIncomplete) {
12549 for (var i = 0; i < msSignatures.length; ++i) {
12550 if (msSignatures[i]) continue
ebd8d4e8 12551
ab78acc6
IC
12552 msSignatures[i] = ops.OP_0
12553 }
12554 } else {
12555 // Array.prototype.filter returns non-sparse array
12556 msSignatures = msSignatures.filter(function (x) { return x })
12557 }
ebd8d4e8 12558
ab78acc6
IC
12559 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12560 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12561 break
12562 }
ebd8d4e8 12563
ab78acc6
IC
12564 case 'pubkey': {
12565 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12566 scriptSig = scripts.pubKeyInput(pkSignature)
12567 break
12568 }
12569 }
ebd8d4e8 12570 }
ebd8d4e8 12571
ab78acc6
IC
12572 // did we build a scriptSig?
12573 if (scriptSig) {
12574 // wrap as scriptHash if necessary
12575 if (input.prevOutType === 'scripthash') {
12576 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12577 }
12578
12579 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12580 }
12581 })
12582
ab78acc6 12583 return tx
ebd8d4e8
IC
12584}
12585
ab78acc6
IC
12586TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12587 assert(index in this.inputs, 'No input at index: ' + index)
12588 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12589
ab78acc6
IC
12590 var input = this.inputs[index]
12591 var canSign = input.hashType &&
12592 input.prevOutScript &&
12593 input.prevOutType &&
12594 input.pubKeys &&
12595 input.scriptType &&
12596 input.signatures
ebd8d4e8 12597
ab78acc6
IC
12598 // are we almost ready to sign?
12599 if (canSign) {
12600 // if redeemScript was provided, enforce consistency
12601 if (redeemScript) {
12602 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12603 }
ebd8d4e8 12604
ab78acc6 12605 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12606
ab78acc6
IC
12607 // no? prepare
12608 } else {
12609 // must be pay-to-scriptHash?
12610 if (redeemScript) {
12611 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12612 if (input.prevOutScript) {
12613 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12614
12615 var scriptHash = input.prevOutScript.chunks[1]
12616 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12617 }
ebd8d4e8 12618
ab78acc6
IC
12619 var scriptType = scripts.classifyOutput(redeemScript)
12620 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12621
ab78acc6
IC
12622 var pubKeys = []
12623 switch (scriptType) {
12624 case 'multisig': {
12625 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12626 break
12627 }
ebd8d4e8 12628
ab78acc6
IC
12629 case 'pubkeyhash': {
12630 var pkh1 = redeemScript.chunks[2]
12631 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12632
ab78acc6
IC
12633 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12634 pubKeys = [privKey.pub]
12635 break
12636 }
ebd8d4e8 12637
ab78acc6
IC
12638 case 'pubkey': {
12639 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12640 break
12641 }
12642 }
ebd8d4e8 12643
ab78acc6
IC
12644 if (!input.prevOutScript) {
12645 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12646 input.prevOutType = 'scripthash'
12647 }
ebd8d4e8 12648
ab78acc6
IC
12649 input.pubKeys = pubKeys
12650 input.redeemScript = redeemScript
12651 input.scriptType = scriptType
ebd8d4e8 12652
ab78acc6
IC
12653 // cannot be pay-to-scriptHash
12654 } else {
12655 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12656
ab78acc6
IC
12657 // can we otherwise sign this?
12658 if (input.scriptType) {
12659 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12660
ab78acc6
IC
12661 // we know nothin' Jon Snow, assume pubKeyHash
12662 } else {
12663 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12664 input.prevOutType = 'pubkeyhash'
12665 input.pubKeys = [privKey.pub]
12666 input.scriptType = input.prevOutType
12667 }
12668 }
ebd8d4e8 12669
ab78acc6
IC
12670 input.hashType = hashType
12671 input.signatures = input.signatures || []
12672 }
12673
12674 var signatureScript = input.redeemScript || input.prevOutScript
12675 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12676
12677 // enforce signature order matches public keys
12678 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12679 // maintain a local copy of unmatched signatures
12680 var unmatched = input.signatures.slice()
12681
12682 input.signatures = input.pubKeys.map(function (pubKey) {
12683 var match
12684
12685 // check for any matching signatures
12686 unmatched.some(function (signature, i) {
12687 if (!pubKey.verify(signatureHash, signature)) return false
12688 match = signature
12689
12690 // remove matched signature from unmatched
12691 unmatched.splice(i, 1)
12692
12693 return true
12694 })
12695
12696 return match || undefined
12697 })
12698 }
12699
12700 // enforce in order signing of public keys
12701 assert(input.pubKeys.some(function (pubKey, i) {
12702 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12703
12704 assert(!input.signatures[i], 'Signature already exists')
12705 var signature = privKey.sign(signatureHash)
12706 input.signatures[i] = signature
12707
12708 return true
12709 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12710}
12711
ab78acc6 12712module.exports = TransactionBuilder
ebd8d4e8 12713
ab78acc6
IC
12714}).call(this,require("buffer").Buffer)
12715},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12716(function (Buffer){
ab78acc6
IC
12717var assert = require('assert')
12718var bufferutils = require('./bufferutils')
12719var typeForce = require('typeforce')
12720var networks = require('./networks')
12721var randomBytes = require('randombytes')
ebd8d4e8 12722
ab78acc6
IC
12723var Address = require('./address')
12724var HDNode = require('./hdnode')
12725var TransactionBuilder = require('./transaction_builder')
12726var Script = require('./script')
ebd8d4e8 12727
ab78acc6
IC
12728function Wallet (seed, network) {
12729 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12730
12731 seed = seed || randomBytes(32)
ebd8d4e8
IC
12732 network = network || networks.bitcoin
12733
12734 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12735 var masterKey = HDNode.fromSeedBuffer(seed, network)
12736
12737 // HD first-level child derivation method should be hardened
12738 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12739 var accountZero = masterKey.deriveHardened(0)
12740 var externalAccount = accountZero.derive(0)
12741 var internalAccount = accountZero.derive(1)
ebd8d4e8 12742
ebd8d4e8
IC
12743 this.addresses = []
12744 this.changeAddresses = []
ab78acc6
IC
12745 this.network = network
12746 this.unspents = []
ebd8d4e8 12747
ab78acc6
IC
12748 // FIXME: remove in 2.0.0
12749 this.unspentMap = {}
ebd8d4e8 12750
ab78acc6
IC
12751 // FIXME: remove in 2.0.0
12752 var me = this
12753 this.newMasterKey = function (seed) {
12754 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12755
12756 seed = seed || randomBytes(32)
12757 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12758
ab78acc6 12759 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12760 externalAccount = accountZero.derive(0)
12761 internalAccount = accountZero.derive(1)
12762
12763 me.addresses = []
12764 me.changeAddresses = []
12765
ab78acc6
IC
12766 me.unspents = []
12767 me.unspentMap = {}
ebd8d4e8
IC
12768 }
12769
ab78acc6
IC
12770 this.getMasterKey = function () {
12771 return masterKey
ebd8d4e8 12772 }
ab78acc6
IC
12773 this.getAccountZero = function () {
12774 return accountZero
ebd8d4e8 12775 }
ab78acc6
IC
12776 this.getExternalAccount = function () {
12777 return externalAccount
12778 }
12779 this.getInternalAccount = function () {
12780 return internalAccount
ebd8d4e8 12781 }
ab78acc6 12782}
ebd8d4e8 12783
ab78acc6
IC
12784Wallet.prototype.createTransaction = function (to, value, options) {
12785 // FIXME: remove in 2.0.0
12786 if (typeof options !== 'object') {
12787 if (options !== undefined) {
12788 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 12789
ab78acc6
IC
12790 options = {
12791 fixedFee: arguments[2],
12792 changeAddress: arguments[3]
12793 }
ebd8d4e8 12794 }
ebd8d4e8
IC
12795 }
12796
ab78acc6 12797 options = options || {}
ebd8d4e8 12798
ab78acc6 12799 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 12800
ab78acc6
IC
12801 var changeAddress = options.changeAddress
12802 var fixedFee = options.fixedFee
12803 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 12804
ab78acc6
IC
12805 // filter by minConf, then pending and sort by descending value
12806 var unspents = this.unspents.filter(function (unspent) {
12807 return unspent.confirmations >= minConf
12808 }).filter(function (unspent) {
12809 return !unspent.pending
12810 }).sort(function (o1, o2) {
12811 return o2.value - o1.value
12812 })
ebd8d4e8 12813
ab78acc6
IC
12814 var accum = 0
12815 var addresses = []
12816 var subTotal = value
ebd8d4e8 12817
ab78acc6
IC
12818 var txb = new TransactionBuilder()
12819 txb.addOutput(to, value)
ebd8d4e8 12820
ab78acc6
IC
12821 for (var i = 0; i < unspents.length; ++i) {
12822 var unspent = unspents[i]
12823 addresses.push(unspent.address)
ebd8d4e8 12824
ab78acc6
IC
12825 txb.addInput(unspent.txHash, unspent.index)
12826
12827 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 12828
ab78acc6
IC
12829 accum += unspent.value
12830 subTotal = value + fee
12831
12832 if (accum >= subTotal) {
12833 var change = accum - subTotal
12834
12835 if (change > this.network.dustThreshold) {
12836 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 12837 }
ebd8d4e8 12838
ab78acc6 12839 break
ebd8d4e8
IC
12840 }
12841 }
12842
ab78acc6 12843 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 12844
ab78acc6
IC
12845 return this.signWith(txb, addresses).build()
12846}
ebd8d4e8 12847
ab78acc6
IC
12848// FIXME: remove in 2.0.0
12849Wallet.prototype.processPendingTx = function (tx) {
12850 this.__processTx(tx, true)
12851}
ebd8d4e8 12852
ab78acc6
IC
12853// FIXME: remove in 2.0.0
12854Wallet.prototype.processConfirmedTx = function (tx) {
12855 this.__processTx(tx, false)
12856}
ebd8d4e8 12857
ab78acc6
IC
12858// FIXME: remove in 2.0.0
12859Wallet.prototype.__processTx = function (tx, isPending) {
12860 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 12861
ab78acc6
IC
12862 var txId = tx.getId()
12863 var txHash = tx.getHash()
ebd8d4e8 12864
ab78acc6
IC
12865 tx.outs.forEach(function (txOut, i) {
12866 var address
ebd8d4e8 12867
ab78acc6
IC
12868 try {
12869 address = Address.fromOutputScript(txOut.script, this.network).toString()
12870 } catch (e) {
12871 if (!(e.message.match(/has no matching Address/)))
12872 throw e
12873 }
12874
12875 var myAddresses = this.addresses.concat(this.changeAddresses)
12876 if (myAddresses.indexOf(address) > -1) {
12877 var lookup = txId + ':' + i
12878 if (lookup in this.unspentMap) return
12879
12880 // its unique, add it
12881 var unspent = {
12882 address: address,
12883 confirmations: 0, // no way to determine this without more information
12884 index: i,
12885 txHash: txHash,
12886 txId: txId,
12887 value: txOut.value,
12888 pending: isPending
ebd8d4e8 12889 }
ebd8d4e8 12890
ab78acc6
IC
12891 this.unspentMap[lookup] = unspent
12892 this.unspents.push(unspent)
12893 }
12894 }, this)
ebd8d4e8 12895
ab78acc6
IC
12896 tx.ins.forEach(function (txIn) {
12897 // copy and convert to big-endian hex
12898 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 12899
ab78acc6
IC
12900 var lookup = txInId + ':' + txIn.index
12901 if (!(lookup in this.unspentMap)) return
ebd8d4e8 12902
ab78acc6 12903 var unspent = this.unspentMap[lookup]
ebd8d4e8 12904
ab78acc6
IC
12905 if (isPending) {
12906 unspent.pending = true
12907 unspent.spent = true
12908 } else {
12909 delete this.unspentMap[lookup]
ebd8d4e8 12910
ab78acc6
IC
12911 this.unspents = this.unspents.filter(function (unspent2) {
12912 return unspent !== unspent2
12913 })
12914 }
12915 }, this)
12916}
ebd8d4e8 12917
ab78acc6
IC
12918Wallet.prototype.generateAddress = function () {
12919 var k = this.addresses.length
12920 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 12921
ab78acc6 12922 this.addresses.push(address.toString())
ebd8d4e8 12923
ab78acc6
IC
12924 return this.getReceiveAddress()
12925}
ebd8d4e8 12926
ab78acc6
IC
12927Wallet.prototype.generateChangeAddress = function () {
12928 var k = this.changeAddresses.length
12929 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 12930
ab78acc6 12931 this.changeAddresses.push(address.toString())
ebd8d4e8 12932
ab78acc6
IC
12933 return this.getChangeAddress()
12934}
ebd8d4e8 12935
ab78acc6
IC
12936Wallet.prototype.getAddress = function () {
12937 if (this.addresses.length === 0) {
12938 this.generateAddress()
ebd8d4e8
IC
12939 }
12940
ab78acc6
IC
12941 return this.addresses[this.addresses.length - 1]
12942}
ebd8d4e8 12943
ab78acc6
IC
12944Wallet.prototype.getBalance = function (minConf) {
12945 minConf = minConf || 0
ebd8d4e8 12946
ab78acc6
IC
12947 return this.unspents.filter(function (unspent) {
12948 return unspent.confirmations >= minConf
12949
12950 // FIXME: remove spent filter in 2.0.0
12951 }).filter(function (unspent) {
12952 return !unspent.spent
12953 }).reduce(function (accum, unspent) {
12954 return accum + unspent.value
12955 }, 0)
12956}
ebd8d4e8 12957
ab78acc6
IC
12958Wallet.prototype.getChangeAddress = function () {
12959 if (this.changeAddresses.length === 0) {
12960 this.generateChangeAddress()
ebd8d4e8
IC
12961 }
12962
ab78acc6
IC
12963 return this.changeAddresses[this.changeAddresses.length - 1]
12964}
12965
12966Wallet.prototype.getInternalPrivateKey = function (index) {
12967 return this.getInternalAccount().derive(index).privKey
12968}
12969
12970Wallet.prototype.getPrivateKey = function (index) {
12971 return this.getExternalAccount().derive(index).privKey
12972}
12973
12974Wallet.prototype.getPrivateKeyForAddress = function (address) {
12975 var index
ebd8d4e8 12976
ab78acc6
IC
12977 if ((index = this.addresses.indexOf(address)) > -1) {
12978 return this.getPrivateKey(index)
ebd8d4e8
IC
12979 }
12980
ab78acc6
IC
12981 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12982 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
12983 }
12984
ab78acc6
IC
12985 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12986}
ebd8d4e8 12987
ab78acc6
IC
12988Wallet.prototype.getUnspentOutputs = function (minConf) {
12989 minConf = minConf || 0
ebd8d4e8 12990
ab78acc6
IC
12991 return this.unspents.filter(function (unspent) {
12992 return unspent.confirmations >= minConf
ebd8d4e8 12993
ab78acc6
IC
12994 // FIXME: remove spent filter in 2.0.0
12995 }).filter(function (unspent) {
12996 return !unspent.spent
12997 }).map(function (unspent) {
12998 return {
12999 address: unspent.address,
13000 confirmations: unspent.confirmations,
13001 index: unspent.index,
13002 txId: unspent.txId,
13003 value: unspent.value,
13004
13005 // FIXME: remove in 2.0.0
13006 hash: unspent.txId,
13007 pending: unspent.pending
13008 }
13009 })
13010}
ebd8d4e8 13011
ab78acc6
IC
13012Wallet.prototype.setUnspentOutputs = function (unspents) {
13013 this.unspentMap = {}
13014 this.unspents = unspents.map(function (unspent) {
13015 // FIXME: remove unspent.hash in 2.0.0
13016 var txId = unspent.txId || unspent.hash
13017 var index = unspent.index
ebd8d4e8 13018
ab78acc6
IC
13019 // FIXME: remove in 2.0.0
13020 if (unspent.hash !== undefined) {
13021 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13022 }
ebd8d4e8 13023
ab78acc6
IC
13024 // FIXME: remove in 2.0.0
13025 if (index === undefined) {
13026 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13027 index = unspent.outputIndex
13028 }
ebd8d4e8 13029
ab78acc6
IC
13030 typeForce('String', txId)
13031 typeForce('Number', index)
13032 typeForce('Number', unspent.value)
13033
13034 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13035 assert.doesNotThrow(function () {
13036 Address.fromBase58Check(unspent.address)
13037 }, 'Expected Base58 Address, got ' + unspent.address)
13038 assert(isFinite(index), 'Expected finite index, got ' + index)
13039
13040 // FIXME: remove branch in 2.0.0
13041 if (unspent.confirmations !== undefined) {
13042 typeForce('Number', unspent.confirmations)
ebd8d4e8 13043 }
ebd8d4e8 13044
ab78acc6 13045 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13046
ab78acc6
IC
13047 unspent = {
13048 address: unspent.address,
13049 confirmations: unspent.confirmations || 0,
13050 index: index,
13051 txHash: txHash,
13052 txId: txId,
13053 value: unspent.value,
ebd8d4e8 13054
ab78acc6
IC
13055 // FIXME: remove in 2.0.0
13056 pending: unspent.pending || false
13057 }
13058
13059 // FIXME: remove in 2.0.0
13060 this.unspentMap[txId + ':' + index] = unspent
13061
13062 return unspent
13063 }, this)
13064}
13065
13066Wallet.prototype.signWith = function (tx, addresses) {
13067 addresses.forEach(function (address, i) {
13068 var privKey = this.getPrivateKeyForAddress(address)
13069
13070 tx.sign(i, privKey)
13071 }, this)
13072
13073 return tx
13074}
13075
13076function estimatePaddedFee (tx, network) {
13077 var tmpTx = tx.clone()
13078 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13079
13080 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13081}
13082
ab78acc6
IC
13083// FIXME: 1.0.0 shims, remove in 2.0.0
13084Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13085Wallet.prototype.createTx = Wallet.prototype.createTransaction
13086
ebd8d4e8
IC
13087module.exports = Wallet
13088
ab78acc6
IC
13089}).call(this,require("buffer").Buffer)
13090},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13091});</script>
d5dc92fd
IC
13092 <script>bitcoin.networks.shadow = {
13093 magicPrefix: '\x19ShadowCash Signed Message:\n',
13094 bip32: {
13095 public: 0xEE80286A,
13096 private: 0xEE8031E8
13097 },
13098 pubKeyHash: 0x3f,
13099 scriptHash: 0x7d,
13100 wif: 0xbf,
13101 dustThreshold: 0,
13102 feePerKb: 1000,
13103 estimateFee: function() { return "unused in this app" },
13104};
13105
13106bitcoin.networks.shadowtn = {
13107 magicPrefix: '\x19ShadowCash Signed Message:\n',
13108 bip32: {
13109 public: 0x76C0FDFB,
13110 private: 0x76C1077A
13111 },
13112 pubKeyHash: 0x7f,
13113 scriptHash: 0xc4,
13114 wif: 0xff,
13115 dustThreshold: 0,
13116 feePerKb: 1000,
13117 estimateFee: function() { return "unused in this app" },
13118};
5c434a8a
CM
13119
13120bitcoin.networks.clam = {
13121 bip32: {
13122 public: 0xa8c26d64,
13123 private: 0xa8c17826
13124 },
13125 pubKeyHash: 0x89,
13126 wif: 0x85,
13127};
d5dc92fd 13128</script>
ab78acc6 13129 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13130
13131//// base.js
13132
13133/** @fileOverview Javascript cryptography implementation.
13134 *
13135 * Crush to remove comments, shorten variable names and
13136 * generally reduce transmission size.
13137 *
13138 * @author Emily Stark
13139 * @author Mike Hamburg
13140 * @author Dan Boneh
13141 */
13142
13143"use strict";
13144/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13145/*global document, window, escape, unescape, module, require, Uint32Array */
13146
13147/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13148var sjcl = {
13149 /** @namespace Symmetric ciphers. */
13150 cipher: {},
13151
13152 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13153 hash: {},
13154
13155 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13156 keyexchange: {},
13157
13158 /** @namespace Block cipher modes of operation. */
13159 mode: {},
13160
13161 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13162 misc: {},
13163
13164 /**
13165 * @namespace Bit array encoders and decoders.
13166 *
13167 * @description
13168 * The members of this namespace are functions which translate between
13169 * SJCL's bitArrays and other objects (usually strings). Because it
13170 * isn't always clear which direction is encoding and which is decoding,
13171 * the method names are "fromBits" and "toBits".
13172 */
13173 codec: {},
13174
13175 /** @namespace Exceptions. */
13176 exception: {
13177 /** @constructor Ciphertext is corrupt. */
13178 corrupt: function(message) {
13179 this.toString = function() { return "CORRUPT: "+this.message; };
13180 this.message = message;
13181 },
13182
13183 /** @constructor Invalid parameter. */
13184 invalid: function(message) {
13185 this.toString = function() { return "INVALID: "+this.message; };
13186 this.message = message;
13187 },
13188
13189 /** @constructor Bug or missing feature in SJCL. @constructor */
13190 bug: function(message) {
13191 this.toString = function() { return "BUG: "+this.message; };
13192 this.message = message;
13193 },
13194
13195 /** @constructor Something isn't ready. */
13196 notReady: function(message) {
13197 this.toString = function() { return "NOT READY: "+this.message; };
13198 this.message = message;
ebd8d4e8 13199 }
80c4dd2a
IC
13200 }
13201};
13202
13203if(typeof module !== 'undefined' && module.exports){
13204 module.exports = sjcl;
13205}
13206if (typeof define === "function") {
13207 define([], function () {
13208 return sjcl;
13209 });
13210}
13211
13212
13213//// bitArray.js
13214
13215/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13216 *
13217 * @author Emily Stark
13218 * @author Mike Hamburg
13219 * @author Dan Boneh
13220 */
13221
13222/** @namespace Arrays of bits, encoded as arrays of Numbers.
13223 *
13224 * @description
13225 * <p>
13226 * These objects are the currency accepted by SJCL's crypto functions.
13227 * </p>
13228 *
13229 * <p>
13230 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13231 * but many of them can take arguments that are not a multiple of 4 bytes.
13232 * This library encodes arrays of bits (whose size need not be a multiple of 8
13233 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13234 * array of words, 32 bits at a time. Since the words are double-precision
13235 * floating point numbers, they fit some extra data. We use this (in a private,
13236 * possibly-changing manner) to encode the number of bits actually present
13237 * in the last word of the array.
13238 * </p>
13239 *
13240 * <p>
13241 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13242 * to ciphers like AES which want arrays of words.
13243 * </p>
13244 */
13245sjcl.bitArray = {
13246 /**
13247 * Array slices in units of bits.
13248 * @param {bitArray} a The array to slice.
13249 * @param {Number} bstart The offset to the start of the slice, in bits.
13250 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13251 * slice until the end of the array.
13252 * @return {bitArray} The requested slice.
13253 */
13254 bitSlice: function (a, bstart, bend) {
13255 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13256 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13257 },
13258
13259 /**
13260 * Extract a number packed into a bit array.
13261 * @param {bitArray} a The array to slice.
13262 * @param {Number} bstart The offset to the start of the slice, in bits.
13263 * @param {Number} length The length of the number to extract.
13264 * @return {Number} The requested slice.
13265 */
13266 extract: function(a, bstart, blength) {
13267 // FIXME: this Math.floor is not necessary at all, but for some reason
13268 // seems to suppress a bug in the Chromium JIT.
13269 var x, sh = Math.floor((-bstart-blength) & 31);
13270 if ((bstart + blength - 1 ^ bstart) & -32) {
13271 // it crosses a boundary
13272 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13273 } else {
13274 // within a single word
13275 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13276 }
80c4dd2a
IC
13277 return x & ((1<<blength) - 1);
13278 },
13279
13280 /**
13281 * Concatenate two bit arrays.
13282 * @param {bitArray} a1 The first array.
13283 * @param {bitArray} a2 The second array.
13284 * @return {bitArray} The concatenation of a1 and a2.
13285 */
13286 concat: function (a1, a2) {
13287 if (a1.length === 0 || a2.length === 0) {
13288 return a1.concat(a2);
13289 }
13290
13291 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13292 if (shift === 32) {
13293 return a1.concat(a2);
13294 } else {
13295 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13296 }
80c4dd2a
IC
13297 },
13298
13299 /**
13300 * Find the length of an array of bits.
13301 * @param {bitArray} a The array.
13302 * @return {Number} The length of a, in bits.
13303 */
13304 bitLength: function (a) {
13305 var l = a.length, x;
13306 if (l === 0) { return 0; }
13307 x = a[l - 1];
13308 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13309 },
13310
13311 /**
13312 * Truncate an array.
13313 * @param {bitArray} a The array.
13314 * @param {Number} len The length to truncate to, in bits.
13315 * @return {bitArray} A new array, truncated to len bits.
13316 */
13317 clamp: function (a, len) {
13318 if (a.length * 32 < len) { return a; }
13319 a = a.slice(0, Math.ceil(len / 32));
13320 var l = a.length;
13321 len = len & 31;
13322 if (l > 0 && len) {
13323 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13324 }
13325 return a;
13326 },
13327
13328 /**
13329 * Make a partial word for a bit array.
13330 * @param {Number} len The number of bits in the word.
13331 * @param {Number} x The bits.
13332 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13333 * @return {Number} The partial word.
13334 */
13335 partial: function (len, x, _end) {
13336 if (len === 32) { return x; }
13337 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13338 },
13339
13340 /**
13341 * Get the number of bits used by a partial word.
13342 * @param {Number} x The partial word.
13343 * @return {Number} The number of bits used by the partial word.
13344 */
13345 getPartial: function (x) {
13346 return Math.round(x/0x10000000000) || 32;
13347 },
13348
13349 /**
13350 * Compare two arrays for equality in a predictable amount of time.
13351 * @param {bitArray} a The first array.
13352 * @param {bitArray} b The second array.
13353 * @return {boolean} true if a == b; false otherwise.
13354 */
13355 equal: function (a, b) {
13356 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13357 return false;
ebd8d4e8 13358 }
80c4dd2a
IC
13359 var x = 0, i;
13360 for (i=0; i<a.length; i++) {
13361 x |= a[i]^b[i];
ebd8d4e8 13362 }
80c4dd2a
IC
13363 return (x === 0);
13364 },
13365
13366 /** Shift an array right.
13367 * @param {bitArray} a The array to shift.
13368 * @param {Number} shift The number of bits to shift.
13369 * @param {Number} [carry=0] A byte to carry in
13370 * @param {bitArray} [out=[]] An array to prepend to the output.
13371 * @private
13372 */
13373 _shiftRight: function (a, shift, carry, out) {
13374 var i, last2=0, shift2;
13375 if (out === undefined) { out = []; }
13376
13377 for (; shift >= 32; shift -= 32) {
13378 out.push(carry);
13379 carry = 0;
13380 }
13381 if (shift === 0) {
13382 return out.concat(a);
13383 }
13384
13385 for (i=0; i<a.length; i++) {
13386 out.push(carry | a[i]>>>shift);
13387 carry = a[i] << (32-shift);
13388 }
13389 last2 = a.length ? a[a.length-1] : 0;
13390 shift2 = sjcl.bitArray.getPartial(last2);
13391 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13392 return out;
13393 },
13394
13395 /** xor a block of 4 words together.
13396 * @private
13397 */
13398 _xor4: function(x,y) {
13399 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13400 },
13401
13402 /** byteswap a word array inplace.
13403 * (does not handle partial words)
13404 * @param {sjcl.bitArray} a word array
13405 * @return {sjcl.bitArray} byteswapped array
13406 */
13407 byteswapM: function(a) {
13408 var i, v, m = 0xff00;
13409 for (i = 0; i < a.length; ++i) {
13410 v = a[i];
13411 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13412 }
80c4dd2a
IC
13413 return a;
13414 }
13415};
13416
13417
13418//// codecString.js
13419
13420/** @fileOverview Bit array codec implementations.
13421 *
13422 * @author Emily Stark
13423 * @author Mike Hamburg
13424 * @author Dan Boneh
13425 */
13426
13427/** @namespace UTF-8 strings */
13428sjcl.codec.utf8String = {
13429 /** Convert from a bitArray to a UTF-8 string. */
13430 fromBits: function (arr) {
13431 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13432 for (i=0; i<bl/8; i++) {
13433 if ((i&3) === 0) {
13434 tmp = arr[i/4];
13435 }
13436 out += String.fromCharCode(tmp >>> 24);
13437 tmp <<= 8;
ebd8d4e8 13438 }
80c4dd2a
IC
13439 return decodeURIComponent(escape(out));
13440 },
13441
13442 /** Convert from a UTF-8 string to a bitArray. */
13443 toBits: function (str) {
13444 str = unescape(encodeURIComponent(str));
13445 var out = [], i, tmp=0;
13446 for (i=0; i<str.length; i++) {
13447 tmp = tmp << 8 | str.charCodeAt(i);
13448 if ((i&3) === 3) {
13449 out.push(tmp);
13450 tmp = 0;
13451 }
ebd8d4e8 13452 }
80c4dd2a
IC
13453 if (i&3) {
13454 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13455 }
80c4dd2a
IC
13456 return out;
13457 }
13458};
13459
13460
13461//// codecHex.js
13462
13463/** @fileOverview Bit array codec implementations.
13464 *
13465 * @author Emily Stark
13466 * @author Mike Hamburg
13467 * @author Dan Boneh
13468 */
13469
13470/** @namespace Hexadecimal */
13471sjcl.codec.hex = {
13472 /** Convert from a bitArray to a hex string. */
13473 fromBits: function (arr) {
13474 var out = "", i;
13475 for (i=0; i<arr.length; i++) {
13476 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13477 }
80c4dd2a
IC
13478 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13479 },
13480 /** Convert from a hex string to a bitArray. */
13481 toBits: function (str) {
13482 var i, out=[], len;
13483 str = str.replace(/\s|0x/g, "");
13484 len = str.length;
13485 str = str + "00000000";
13486 for (i=0; i<str.length; i+=8) {
13487 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13488 }
80c4dd2a
IC
13489 return sjcl.bitArray.clamp(out, len*4);
13490 }
13491};
13492
13493
13494//// sha512.js
13495
13496/** @fileOverview Javascript SHA-512 implementation.
13497 *
13498 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13499 * SJCL by Stefan Thomas.
13500 *
13501 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13502 * Released with New BSD License
13503 *
13504 * @author Emily Stark
13505 * @author Mike Hamburg
13506 * @author Dan Boneh
13507 * @author Jeff Mott
13508 * @author Stefan Thomas
13509 */
13510
13511/**
13512 * Context for a SHA-512 operation in progress.
13513 * @constructor
13514 * @class Secure Hash Algorithm, 512 bits.
13515 */
13516sjcl.hash.sha512 = function (hash) {
13517 if (!this._key[0]) { this._precompute(); }
13518 if (hash) {
13519 this._h = hash._h.slice(0);
13520 this._buffer = hash._buffer.slice(0);
13521 this._length = hash._length;
13522 } else {
13523 this.reset();
13524 }
13525};
13526
13527/**
13528 * Hash a string or an array of words.
13529 * @static
13530 * @param {bitArray|String} data the data to hash.
13531 * @return {bitArray} The hash value, an array of 16 big-endian words.
13532 */
13533sjcl.hash.sha512.hash = function (data) {
13534 return (new sjcl.hash.sha512()).update(data).finalize();
13535};
13536
13537sjcl.hash.sha512.prototype = {
13538 /**
13539 * The hash's block size, in bits.
13540 * @constant
13541 */
13542 blockSize: 1024,
13543
13544 /**
13545 * Reset the hash state.
13546 * @return this
13547 */
13548 reset:function () {
13549 this._h = this._init.slice(0);
13550 this._buffer = [];
13551 this._length = 0;
13552 return this;
13553 },
13554
13555 /**
13556 * Input several words to the hash.
13557 * @param {bitArray|String} data the data to hash.
13558 * @return this
13559 */
13560 update: function (data) {
13561 if (typeof data === "string") {
13562 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13563 }
80c4dd2a
IC
13564 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13565 ol = this._length,
13566 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13567 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13568 this._block(b.splice(0,32));
ebd8d4e8 13569 }
80c4dd2a
IC
13570 return this;
13571 },
13572
13573 /**
13574 * Complete hashing and output the hash value.
13575 * @return {bitArray} The hash value, an array of 16 big-endian words.
13576 */
13577 finalize:function () {
13578 var i, b = this._buffer, h = this._h;
13579
13580 // Round out and push the buffer
13581 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13582
13583 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13584 for (i = b.length + 4; i & 31; i++) {
13585 b.push(0);
ebd8d4e8 13586 }
80c4dd2a
IC
13587
13588 // append the length
13589 b.push(0);
13590 b.push(0);
13591 b.push(Math.floor(this._length / 0x100000000));
13592 b.push(this._length | 0);
13593
13594 while (b.length) {
13595 this._block(b.splice(0,32));
ebd8d4e8 13596 }
80c4dd2a
IC
13597
13598 this.reset();
13599 return h;
13600 },
13601
13602 /**
13603 * The SHA-512 initialization vector, to be precomputed.
13604 * @private
13605 */
13606 _init:[],
13607
13608 /**
13609 * Least significant 24 bits of SHA512 initialization values.
13610 *
13611 * Javascript only has 53 bits of precision, so we compute the 40 most
13612 * significant bits and add the remaining 24 bits as constants.
13613 *
13614 * @private
13615 */
13616 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13617
13618 /*
13619 _init:
13620 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13621 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13622 */
13623
13624 /**
13625 * The SHA-512 hash key, to be precomputed.
13626 * @private
13627 */
13628 _key:[],
13629
13630 /**
13631 * Least significant 24 bits of SHA512 key values.
13632 * @private
13633 */
13634 _keyr:
13635 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13636 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13637 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13638 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13639 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13640 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13641 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13642 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13643 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13644 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13645
13646 /*
13647 _key:
13648 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13649 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13650 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13651 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13652 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13653 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13654 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13655 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13656 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13657 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13658 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13659 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13660 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13661 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13662 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13663 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13664 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13665 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13666 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13667 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13668 */
13669
13670 /**
13671 * Function to precompute _init and _key.
13672 * @private
13673 */
13674 _precompute: function () {
13675 // XXX: This code is for precomputing the SHA256 constants, change for
13676 // SHA512 and re-enable.
13677 var i = 0, prime = 2, factor;
13678
13679 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13680 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13681
13682 outer: for (; i<80; prime++) {
13683 for (factor=2; factor*factor <= prime; factor++) {
13684 if (prime % factor === 0) {
13685 // not a prime
13686 continue outer;
ebd8d4e8 13687 }
80c4dd2a
IC
13688 }
13689
13690 if (i<8) {
13691 this._init[i*2] = frac(Math.pow(prime, 1/2));
13692 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13693 }
13694 this._key[i*2] = frac(Math.pow(prime, 1/3));
13695 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13696 i++;
ebd8d4e8 13697 }
80c4dd2a
IC
13698 },
13699
13700 /**
13701 * Perform one cycle of SHA-512.
13702 * @param {bitArray} words one block of words.
13703 * @private
13704 */
13705 _block:function (words) {
13706 var i, wrh, wrl,
13707 w = words.slice(0),
13708 h = this._h,
13709 k = this._key,
13710 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13711 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13712 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13713 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13714
13715 // Working variables
13716 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13717 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13718 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13719 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13720
13721 for (i=0; i<80; i++) {
13722 // load up the input word for this round
13723 if (i<16) {
13724 wrh = w[i * 2];
13725 wrl = w[i * 2 + 1];
13726 } else {
13727 // Gamma0
13728 var gamma0xh = w[(i-15) * 2];
13729 var gamma0xl = w[(i-15) * 2 + 1];
13730 var gamma0h =
13731 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13732 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13733 (gamma0xh >>> 7);
13734 var gamma0l =
13735 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13736 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13737 ((gamma0xh << 25) | (gamma0xl >>> 7));
13738
13739 // Gamma1
13740 var gamma1xh = w[(i-2) * 2];
13741 var gamma1xl = w[(i-2) * 2 + 1];
13742 var gamma1h =
13743 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13744 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13745 (gamma1xh >>> 6);
13746 var gamma1l =
13747 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13748 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13749 ((gamma1xh << 26) | (gamma1xl >>> 6));
13750
13751 // Shortcuts
13752 var wr7h = w[(i-7) * 2];
13753 var wr7l = w[(i-7) * 2 + 1];
13754
13755 var wr16h = w[(i-16) * 2];
13756 var wr16l = w[(i-16) * 2 + 1];
13757
13758 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13759 wrl = gamma0l + wr7l;
13760 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13761 wrl += gamma1l;
13762 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13763 wrl += wr16l;
13764 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13765 }
13766
13767 w[i*2] = wrh |= 0;
13768 w[i*2 + 1] = wrl |= 0;
13769
13770 // Ch
13771 var chh = (eh & fh) ^ (~eh & gh);
13772 var chl = (el & fl) ^ (~el & gl);
13773
13774 // Maj
13775 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13776 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13777
13778 // Sigma0
13779 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13780 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13781
13782 // Sigma1
13783 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13784 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13785
13786 // K(round)
13787 var krh = k[i*2];
13788 var krl = k[i*2+1];
13789
13790 // t1 = h + sigma1 + ch + K(round) + W(round)
13791 var t1l = hl + sigma1l;
13792 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13793 t1l += chl;
13794 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13795 t1l += krl;
13796 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13797 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13798 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13799
13800 // t2 = sigma0 + maj
13801 var t2l = sigma0l + majl;
13802 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13803
13804 // Update working variables
13805 hh = gh;
13806 hl = gl;
13807 gh = fh;
13808 gl = fl;
13809 fh = eh;
13810 fl = el;
13811 el = (dl + t1l) | 0;
13812 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13813 dh = ch;
13814 dl = cl;
13815 ch = bh;
13816 cl = bl;
13817 bh = ah;
13818 bl = al;
13819 al = (t1l + t2l) | 0;
13820 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13821 }
13822
13823 // Intermediate hash
13824 h0l = h[1] = (h0l + al) | 0;
13825 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13826 h1l = h[3] = (h1l + bl) | 0;
13827 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13828 h2l = h[5] = (h2l + cl) | 0;
13829 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13830 h3l = h[7] = (h3l + dl) | 0;
13831 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13832 h4l = h[9] = (h4l + el) | 0;
13833 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13834 h5l = h[11] = (h5l + fl) | 0;
13835 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13836 h6l = h[13] = (h6l + gl) | 0;
13837 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13838 h7l = h[15] = (h7l + hl) | 0;
13839 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13840 }
13841};
13842
13843
13844//// hmac.js
13845
13846/** @fileOverview HMAC implementation.
13847 *
13848 * @author Emily Stark
13849 * @author Mike Hamburg
13850 * @author Dan Boneh
13851 */
13852
13853/** HMAC with the specified hash function.
13854 * @constructor
13855 * @param {bitArray} key the key for HMAC.
13856 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13857 */
13858sjcl.misc.hmac = function (key, Hash) {
13859 this._hash = Hash = Hash || sjcl.hash.sha256;
13860 var exKey = [[],[]], i,
13861 bs = Hash.prototype.blockSize / 32;
13862 this._baseHash = [new Hash(), new Hash()];
13863
13864 if (key.length > bs) {
13865 key = Hash.hash(key);
13866 }
13867
13868 for (i=0; i<bs; i++) {
13869 exKey[0][i] = key[i]^0x36363636;
13870 exKey[1][i] = key[i]^0x5C5C5C5C;
13871 }
13872
13873 this._baseHash[0].update(exKey[0]);
13874 this._baseHash[1].update(exKey[1]);
13875 this._resultHash = new Hash(this._baseHash[0]);
13876};
13877
13878/** HMAC with the specified hash function. Also called encrypt since it's a prf.
13879 * @param {bitArray|String} data The data to mac.
13880 */
13881sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13882 if (!this._updated) {
13883 this.update(data);
13884 return this.digest(data);
13885 } else {
13886 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13887 }
13888};
13889
13890sjcl.misc.hmac.prototype.reset = function () {
13891 this._resultHash = new this._hash(this._baseHash[0]);
13892 this._updated = false;
13893};
13894
13895sjcl.misc.hmac.prototype.update = function (data) {
13896 this._updated = true;
13897 this._resultHash.update(data);
13898};
13899
13900sjcl.misc.hmac.prototype.digest = function () {
13901 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13902
13903 this.reset();
13904
13905 return result;
13906};
13907
13908
13909//// pbkdf2.js
13910
13911
13912/** @fileOverview Password-based key-derivation function, version 2.0.
13913 *
13914 * @author Emily Stark
13915 * @author Mike Hamburg
13916 * @author Dan Boneh
13917 */
13918
13919/** Password-Based Key-Derivation Function, version 2.0.
13920 *
13921 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13922 *
13923 * This is the method specified by RSA's PKCS #5 standard.
13924 *
13925 * @param {bitArray|String} password The password.
13926 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13927 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13928 * @param {Number} [length] The length of the derived key. Defaults to the
13929 output size of the hash function.
13930 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13931 * @return {bitArray} the derived key.
13932 */
13933sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13934 count = count || 1000;
13935
13936 if (length < 0 || count < 0) {
13937 throw sjcl.exception.invalid("invalid params to pbkdf2");
13938 }
13939
13940 if (typeof password === "string") {
13941 password = sjcl.codec.utf8String.toBits(password);
13942 }
13943
13944 if (typeof salt === "string") {
13945 salt = sjcl.codec.utf8String.toBits(salt);
13946 }
13947
13948 Prff = Prff || sjcl.misc.hmac;
13949
13950 var prf = new Prff(password),
13951 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13952
13953 for (k = 1; 32 * out.length < (length || 1); k++) {
13954 u = ui = prf.encrypt(b.concat(salt,[k]));
13955
13956 for (i=1; i<count; i++) {
13957 ui = prf.encrypt(ui);
13958 for (j=0; j<ui.length; j++) {
13959 u[j] ^= ui[j];
13960 }
ebd8d4e8 13961 }
80c4dd2a
IC
13962
13963 out = out.concat(u);
13964 }
13965
13966 if (length) { out = b.clamp(out, length); }
13967
13968 return out;
13969};
13970
13971
13972//// sha256.js
13973
13974/** @fileOverview Javascript SHA-256 implementation.
13975 *
13976 * An older version of this implementation is available in the public
13977 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13978 * Stanford University 2008-2010 and BSD-licensed for liability
13979 * reasons.
13980 *
13981 * Special thanks to Aldo Cortesi for pointing out several bugs in
13982 * this code.
13983 *
13984 * @author Emily Stark
13985 * @author Mike Hamburg
13986 * @author Dan Boneh
13987 */
13988
13989/**
13990 * Context for a SHA-256 operation in progress.
13991 * @constructor
13992 * @class Secure Hash Algorithm, 256 bits.
13993 */
13994sjcl.hash.sha256 = function (hash) {
13995 if (!this._key[0]) { this._precompute(); }
13996 if (hash) {
13997 this._h = hash._h.slice(0);
13998 this._buffer = hash._buffer.slice(0);
13999 this._length = hash._length;
14000 } else {
14001 this.reset();
14002 }
14003};
14004
14005/**
14006 * Hash a string or an array of words.
14007 * @static
14008 * @param {bitArray|String} data the data to hash.
14009 * @return {bitArray} The hash value, an array of 16 big-endian words.
14010 */
14011sjcl.hash.sha256.hash = function (data) {
14012 return (new sjcl.hash.sha256()).update(data).finalize();
14013};
14014
14015sjcl.hash.sha256.prototype = {
14016 /**
14017 * The hash's block size, in bits.
14018 * @constant
14019 */
14020 blockSize: 512,
14021
14022 /**
14023 * Reset the hash state.
14024 * @return this
14025 */
14026 reset:function () {
14027 this._h = this._init.slice(0);
14028 this._buffer = [];
14029 this._length = 0;
14030 return this;
14031 },
14032
14033 /**
14034 * Input several words to the hash.
14035 * @param {bitArray|String} data the data to hash.
14036 * @return this
14037 */
14038 update: function (data) {
14039 if (typeof data === "string") {
14040 data = sjcl.codec.utf8String.toBits(data);
14041 }
14042 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14043 ol = this._length,
14044 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14045 for (i = 512+ol & -512; i <= nl; i+= 512) {
14046 this._block(b.splice(0,16));
ebd8d4e8 14047 }
3af2954a 14048 return this;
80c4dd2a
IC
14049 },
14050
14051 /**
14052 * Complete hashing and output the hash value.
14053 * @return {bitArray} The hash value, an array of 8 big-endian words.
14054 */
14055 finalize:function () {
14056 var i, b = this._buffer, h = this._h;
14057
14058 // Round out and push the buffer
14059 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14060
14061 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14062 for (i = b.length + 2; i & 15; i++) {
14063 b.push(0);
14064 }
14065
14066 // append the length
14067 b.push(Math.floor(this._length / 0x100000000));
14068 b.push(this._length | 0);
14069
14070 while (b.length) {
14071 this._block(b.splice(0,16));
14072 }
14073
14074 this.reset();
14075 return h;
14076 },
14077
14078 /**
14079 * The SHA-256 initialization vector, to be precomputed.
14080 * @private
14081 */
14082 _init:[],
14083 /*
14084 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14085 */
14086
14087 /**
14088 * The SHA-256 hash key, to be precomputed.
14089 * @private
14090 */
14091 _key:[],
14092 /*
14093 _key:
14094 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14095 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14096 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14097 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14098 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14099 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14100 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14101 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14102 */
14103
14104
14105 /**
14106 * Function to precompute _init and _key.
14107 * @private
14108 */
14109 _precompute: function () {
14110 var i = 0, prime = 2, factor;
14111
14112 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14113
14114 outer: for (; i<64; prime++) {
14115 for (factor=2; factor*factor <= prime; factor++) {
14116 if (prime % factor === 0) {
14117 // not a prime
14118 continue outer;
ebd8d4e8 14119 }
80c4dd2a
IC
14120 }
14121
14122 if (i<8) {
14123 this._init[i] = frac(Math.pow(prime, 1/2));
14124 }
14125 this._key[i] = frac(Math.pow(prime, 1/3));
14126 i++;
ebd8d4e8 14127 }
80c4dd2a
IC
14128 },
14129
14130 /**
14131 * Perform one cycle of SHA-256.
14132 * @param {bitArray} words one block of words.
14133 * @private
14134 */
14135 _block:function (words) {
14136 var i, tmp, a, b,
14137 w = words.slice(0),
14138 h = this._h,
14139 k = this._key,
14140 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14141 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14142
14143 /* Rationale for placement of |0 :
14144 * If a value can overflow is original 32 bits by a factor of more than a few
14145 * million (2^23 ish), there is a possibility that it might overflow the
14146 * 53-bit mantissa and lose precision.
14147 *
14148 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14149 * propagates around the loop, and on the hash state h[]. I don't believe
14150 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14151 * (for h4 anyway), and better safe than sorry.
14152 *
14153 * The clamps on h[] are necessary for the output to be correct even in the
14154 * common case and for short inputs.
14155 */
14156 for (i=0; i<64; i++) {
14157 // load up the input word for this round
14158 if (i<16) {
14159 tmp = w[i];
14160 } else {
14161 a = w[(i+1 ) & 15];
14162 b = w[(i+14) & 15];
14163 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14164 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14165 w[i&15] + w[(i+9) & 15]) | 0;
14166 }
14167
14168 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14169
14170 // shift register
14171 h7 = h6; h6 = h5; h5 = h4;
14172 h4 = h3 + tmp | 0;
14173 h3 = h2; h2 = h1; h1 = h0;
14174
14175 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14176 }
14177
14178 h[0] = h[0]+h0 | 0;
14179 h[1] = h[1]+h1 | 0;
14180 h[2] = h[2]+h2 | 0;
14181 h[3] = h[3]+h3 | 0;
14182 h[4] = h[4]+h4 | 0;
14183 h[5] = h[5]+h5 | 0;
14184 h[6] = h[6]+h6 | 0;
14185 h[7] = h[7]+h7 | 0;
14186 }
14187};
dc55c6b0 14188</script>
ab78acc6 14189 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14190WORDLISTS["english"] = [
ebd8d4e8
IC
14191"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14192"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14193"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14194"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14195"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14196"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14197"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14198"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14199"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14200"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14201"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14202"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14203"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14204"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14205"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14206"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14207"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14208"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14209"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14210"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14211"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14212"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14213"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14214"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14215"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14216"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14217"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14218"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14219"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14220"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14221"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14222"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14223"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14224"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14225"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14226"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14227"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14228"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14229"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14230"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14231"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14232"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14233"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14234"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14235"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14236"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14237"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14238"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14239"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14240"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14241"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14242"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14243"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14244"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14245"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14246"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14247"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14248"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14249"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14250"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14251"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14252"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14253"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14254"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14255"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14256"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14257"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14258"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14259"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14260"film","filter","final","find","fine","finger","finish","fire","firm","first",
14261"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14262"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14263"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14264"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14265"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14266"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14267"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14268"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14269"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14270"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14271"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14272"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14273"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14274"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14275"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14276"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14277"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14278"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14279"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14280"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14281"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14282"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14283"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14284"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14285"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14286"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14287"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14288"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14289"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14290"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14291"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14292"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14293"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14294"liar","liberty","library","license","life","lift","light","like","limb","limit",
14295"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14296"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14297"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14298"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14299"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14300"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14301"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14302"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14303"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14304"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14305"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14306"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14307"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14308"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14309"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14310"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14311"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14312"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14313"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14314"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14315"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14316"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14317"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14318"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14319"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14320"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14321"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14322"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14323"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14324"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14325"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14326"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14327"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14328"prize","problem","process","produce","profit","program","project","promote","proof","property",
14329"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14330"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14331"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14332"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14333"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14334"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14335"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14336"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14337"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14338"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14339"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14340"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14341"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14342"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14343"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14344"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14345"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14346"scrub","sea","search","season","seat","second","secret","section","security","seed",
14347"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14348"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14349"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14350"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14351"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14352"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14353"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14354"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14355"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14356"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14357"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14358"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14359"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14360"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14361"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14362"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14363"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14364"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14365"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14366"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14367"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14368"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14369"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14370"thank","that","theme","then","theory","there","they","thing","this","thought",
14371"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14372"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14373"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14374"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14375"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14376"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14377"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14378"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14379"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14380"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14381"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14382"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14383"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14384"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14385"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14386"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14387"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14388"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14389"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14390"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14391"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14392"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14393"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14394"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14395"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14396</script>
ab78acc6 14397 <script>/*
3af2954a
IC
14398 * Copyright (c) 2013 Pavol Rusnak
14399 *
14400 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14401 * this software and associated documentation files (the "Software"), to deal in
14402 * the Software without restriction, including without limitation the rights to
14403 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14404 * of the Software, and to permit persons to whom the Software is furnished to do
14405 * so, subject to the following conditions:
14406 *
14407 * The above copyright notice and this permission notice shall be included in all
14408 * copies or substantial portions of the Software.
14409 *
14410 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14411 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14412 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14413 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14414 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14415 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14416 */
14417
14418/*
14419 * Javascript port from python by Ian Coleman
14420 *
80c4dd2a
IC
14421 * Requires code from sjcl
14422 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14423 */
14424
14425var Mnemonic = function(language) {
14426
14427 var PBKDF2_ROUNDS = 2048;
14428 var RADIX = 2048;
14429
14430 var self = this;
14431 var wordlist = [];
14432
80c4dd2a
IC
14433 var hmacSHA512 = function(key) {
14434 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14435 this.encrypt = function() {
14436 return hasher.encrypt.apply(hasher, arguments);
14437 };
14438 };
14439
3af2954a
IC
14440 function init() {
14441 wordlist = WORDLISTS[language];
14442 if (wordlist.length != RADIX) {
14443 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14444 throw err;
14445 }
14446 }
14447
14448 self.generate = function(strength) {
14449 strength = strength || 128;
14450 var r = strength % 32;
14451 if (r > 0) {
14452 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14453 }
14454 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14455 if (!hasStrongCrypto) {
14456 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14457 }
14458 var buffer = new Uint8Array(strength / 8);
14459 var data = crypto.getRandomValues(buffer);
14460 return self.toMnemonic(data);
14461 }
14462
80c4dd2a
IC
14463 self.toMnemonic = function(byteArray) {
14464 if (byteArray.length % 4 > 0) {
14465 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14466 }
14467
14468 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14469 var data = byteArrayToWordArray(byteArray);
14470 var hash = sjcl.hash.sha256.hash(data);
14471 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14472
14473 // b is a binary string, eg '00111010101100...'
14474 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14475 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14476 //
14477 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14478 // c = bin(int(h, 16))[2:].zfill(256)
14479 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14480 var a = byteArrayToBinaryString(byteArray);
14481 var c = zfill(hexStringToBinaryString(h), 256);
14482 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14483 // b = line1 + line2
14484 var b = a + d;
14485
14486 var result = [];
14487 var blen = b.length / 11;
14488 for (var i=0; i<blen; i++) {
14489 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14490 result.push(wordlist[idx]);
14491 }
14492 return result.join(' ');
14493 }
14494
14495 self.check = function(mnemonic) {
14496 var mnemonic = mnemonic.split(' ')
14497 if (mnemonic.length % 3 > 0) {
14498 return false
14499 }
14500 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14501 var idx = [];
14502 for (var i=0; i<mnemonic.length; i++) {
14503 var word = mnemonic[i];
14504 var wordIndex = wordlist.indexOf(word);
14505 if (wordIndex == -1) {
14506 return false;
14507 }
14508 var binaryIndex = zfill(wordIndex.toString(2), 11);
14509 idx.push(binaryIndex);
14510 }
14511 var b = idx.join('');
14512 var l = b.length;
14513 //d = b[:l / 33 * 32]
14514 //h = b[-l / 33:]
14515 var d = b.substring(0, l / 33 * 32);
14516 var h = b.substring(l - l / 33, l);
14517 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14518 var nd = binaryStringToWordArray(d);
3af2954a 14519 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14520 var ndHash = sjcl.hash.sha256.hash(nd);
14521 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14522 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14523 var nh = ndBstr.substring(0,l/33);
14524 return h == nh;
14525 }
14526
14527 self.toSeed = function(mnemonic, passphrase) {
14528 passphrase = passphrase || '';
7772c641 14529 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
3af2954a
IC
14530 passphrase = self.normalizeString(passphrase)
14531 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14532 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14533 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14534 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14535 var hashHex = sjcl.codec.hex.fromBits(result);
14536 return hashHex;
3af2954a
IC
14537 }
14538
14539 self.normalizeString = function(str) {
14540 if (typeof str.normalize == "function") {
14541 return str.normalize("NFKD");
14542 }
14543 else {
14544 // TODO decide how to handle this in the future.
14545 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14546 return str;
14547 }
14548 }
14549
80c4dd2a
IC
14550 function byteArrayToWordArray(data) {
14551 var a = [];
14552 for (var i=0; i<data.length/4; i++) {
14553 v = 0;
14554 v += data[i*4 + 0] << 8 * 3;
14555 v += data[i*4 + 1] << 8 * 2;
14556 v += data[i*4 + 2] << 8 * 1;
14557 v += data[i*4 + 3] << 8 * 0;
14558 a.push(v);
14559 }
14560 return a;
14561 }
14562
3af2954a
IC
14563 function byteArrayToBinaryString(data) {
14564 var bin = "";
14565 for (var i=0; i<data.length; i++) {
14566 bin += zfill(data[i].toString(2), 8);
14567 }
14568 return bin;
14569 }
14570
80c4dd2a
IC
14571 function hexStringToBinaryString(hexString) {
14572 binaryString = "";
14573 for (var i=0; i<hexString.length; i++) {
14574 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14575 }
14576 return binaryString;
14577 }
14578
14579 function binaryStringToWordArray(binary) {
14580 var aLen = binary.length / 32;
14581 var a = [];
14582 for (var i=0; i<aLen; i++) {
14583 var valueStr = binary.substring(0,32);
3af2954a 14584 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14585 a.push(value);
14586 binary = binary.slice(32);
3af2954a 14587 }
80c4dd2a 14588 return a;
3af2954a
IC
14589 }
14590
14591 // Pad a numeric string on the left with zero digits until the given width
14592 // is reached.
14593 // Note this differs to the python implementation because it does not
14594 // handle numbers starting with a sign.
14595 function zfill(source, length) {
14596 source = source.toString();
14597 while (source.length < length) {
14598 source = '0' + source;
14599 }
14600 return source;
14601 }
14602
14603 init();
ebd8d4e8 14604
3af2954a 14605}
dc55c6b0 14606</script>
ab78acc6 14607 <script>(function() {
ebd8d4e8
IC
14608
14609 var mnemonic = new Mnemonic("english");
73161a92 14610 var seed = null
ebd8d4e8
IC
14611 var bip32RootKey = null;
14612 var bip32ExtendedKey = null;
ab78acc6 14613 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14614 var addressRowTemplate = $("#address-row-template");
14615
80c4dd2a
IC
14616 var showIndex = true;
14617 var showAddress = true;
14618 var showPrivKey = true;
14619
ebd8d4e8
IC
14620 var phraseChangeTimeoutEvent = null;
14621
14622 var DOM = {};
d6cedc94
IC
14623 DOM.network = $(".network");
14624 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14625 DOM.phrase = $(".phrase");
721b7284 14626 DOM.passphrase = $(".passphrase");
ebd8d4e8 14627 DOM.generate = $(".generate");
73161a92 14628 DOM.seed = $(".seed");
ebd8d4e8
IC
14629 DOM.rootKey = $(".root-key");
14630 DOM.extendedPrivKey = $(".extended-priv-key");
14631 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14632 DOM.bip32tab = $("#bip32-tab");
14633 DOM.bip44tab = $("#bip44-tab");
14634 DOM.bip32panel = $("#bip32");
14635 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14636 DOM.bip32path = $("#bip32-path");
14637 DOM.bip44path = $("#bip44-path");
14638 DOM.bip44purpose = $("#bip44 .purpose");
14639 DOM.bip44coin = $("#bip44 .coin");
14640 DOM.bip44account = $("#bip44 .account");
14641 DOM.bip44change = $("#bip44 .change");
14642 DOM.strength = $(".strength");
14643 DOM.addresses = $(".addresses");
14644 DOM.rowsToAdd = $(".rows-to-add");
14645 DOM.more = $(".more");
14646 DOM.feedback = $(".feedback");
14647 DOM.tab = $(".derivation-type a");
14648 DOM.indexToggle = $(".index-toggle");
14649 DOM.addressToggle = $(".address-toggle");
14650 DOM.privateKeyToggle = $(".private-key-toggle");
14651
ebd8d4e8
IC
14652 function init() {
14653 // Events
d6cedc94 14654 DOM.network.on("change", networkChanged);
a19a5498
IC
14655 DOM.phrase.on("input", delayedPhraseChanged);
14656 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14657 DOM.generate.on("click", generateClicked);
14658 DOM.more.on("click", showMore);
38523d36
IC
14659 DOM.bip32path.on("input", delayedPhraseChanged);
14660 DOM.bip44purpose.on("input", delayedPhraseChanged);
14661 DOM.bip44coin.on("input", delayedPhraseChanged);
14662 DOM.bip44account.on("input", delayedPhraseChanged);
14663 DOM.bip44change.on("input", delayedPhraseChanged);
14664 DOM.tab.on("click", delayedPhraseChanged);
ebd8d4e8
IC
14665 DOM.indexToggle.on("click", toggleIndexes);
14666 DOM.addressToggle.on("click", toggleAddresses);
14667 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14668 disableForms();
14669 hidePending();
14670 hideValidationError();
ab78acc6 14671 populateNetworkSelect();
ebd8d4e8
IC
14672 }
14673
14674 // Event handlers
14675
d6cedc94 14676 function networkChanged(e) {
ab78acc6
IC
14677 var network = e.target.value;
14678 networks[network].onSelect();
d6cedc94
IC
14679 delayedPhraseChanged();
14680 }
14681
ebd8d4e8
IC
14682 function delayedPhraseChanged() {
14683 hideValidationError();
14684 showPending();
14685 if (phraseChangeTimeoutEvent != null) {
14686 clearTimeout(phraseChangeTimeoutEvent);
14687 }
14688 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14689 }
14690
14691 function phraseChanged() {
14692 showPending();
14693 hideValidationError();
14694 // Get the mnemonic phrase
14695 var phrase = DOM.phrase.val();
721b7284 14696 var passphrase = DOM.passphrase.val();
ebd8d4e8
IC
14697 var errorText = findPhraseErrors(phrase);
14698 if (errorText) {
14699 showValidationError(errorText);
14700 return;
14701 }
14702 // Get the derivation path
38523d36
IC
14703 var derivationPath = getDerivationPath();
14704 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
14705 if (errorText) {
14706 showValidationError(errorText);
14707 return;
14708 }
14709 // Calculate and display
721b7284 14710 calcBip32Seed(phrase, passphrase, derivationPath);
ebd8d4e8
IC
14711 displayBip32Info();
14712 hidePending();
14713 }
14714
14715 function generateClicked() {
14716 clearDisplay();
14717 showPending();
14718 setTimeout(function() {
14719 var phrase = generateRandomPhrase();
14720 if (!phrase) {
14721 return;
14722 }
14723 phraseChanged();
14724 }, 50);
14725 }
14726
ebd8d4e8 14727 function toggleIndexes() {
80c4dd2a 14728 showIndex = !showIndex;
ebd8d4e8
IC
14729 $("td.index span").toggleClass("invisible");
14730 }
14731
14732 function toggleAddresses() {
80c4dd2a 14733 showAddress = !showAddress;
ebd8d4e8
IC
14734 $("td.address span").toggleClass("invisible");
14735 }
14736
14737 function togglePrivateKeys() {
80c4dd2a 14738 showPrivKey = !showPrivKey;
ebd8d4e8
IC
14739 $("td.privkey span").toggleClass("invisible");
14740 }
14741
14742 // Private methods
14743
14744 function generateRandomPhrase() {
14745 if (!hasStrongRandom()) {
14746 var errorText = "This browser does not support strong randomness";
14747 showValidationError(errorText);
14748 return;
14749 }
14750 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
14751 var strength = numWords / 3 * 32;
14752 var words = mnemonic.generate(strength);
14753 DOM.phrase.val(words);
14754 return words;
14755 }
14756
721b7284 14757 function calcBip32Seed(phrase, passphrase, path) {
73161a92 14758 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 14759 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
ebd8d4e8
IC
14760 bip32ExtendedKey = bip32RootKey;
14761 // Derive the key from the path
14762 var pathBits = path.split("/");
14763 for (var i=0; i<pathBits.length; i++) {
14764 var bit = pathBits[i];
14765 var index = parseInt(bit);
14766 if (isNaN(index)) {
14767 continue;
14768 }
14769 var hardened = bit[bit.length-1] == "'";
14770 if (hardened) {
14771 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14772 }
14773 else {
14774 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14775 }
14776 }
14777 }
14778
14779 function showValidationError(errorText) {
14780 DOM.feedback
14781 .text(errorText)
14782 .show();
14783 }
14784
14785 function hideValidationError() {
14786 DOM.feedback
14787 .text("")
14788 .hide();
14789 }
14790
14791 function findPhraseErrors(phrase) {
14792 // TODO make this right
14793 // Preprocess the words
783981de 14794 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
14795 var parts = phrase.split(" ");
14796 var proper = [];
14797 for (var i=0; i<parts.length; i++) {
14798 var part = parts[i];
14799 if (part.length > 0) {
14800 // TODO check that lowercasing is always valid to do
14801 proper.push(part.toLowerCase());
14802 }
14803 }
14804 // TODO some levenstein on the words
14805 var properPhrase = proper.join(' ');
14806 // Check the words are valid
14807 var isValid = mnemonic.check(properPhrase);
14808 if (!isValid) {
14809 return "Invalid mnemonic";
14810 }
14811 return false;
14812 }
14813
38523d36
IC
14814 function getDerivationPath() {
14815 if (DOM.bip44tab.hasClass("active")) {
14816 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14817 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14818 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14819 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14820 var path = "m/";
14821 path += purpose + "'/";
14822 path += coin + "'/";
14823 path += account + "'/";
14824 path += change;
14825 DOM.bip44path.val(path);
14826 var derivationPath = DOM.bip44path.val();
14827 console.log("Using derivation path from BIP44 tab: " + derivationPath);
14828 return derivationPath;
14829 }
14830 else if (DOM.bip32tab.hasClass("active")) {
14831 var derivationPath = DOM.bip32path.val();
14832 console.log("Using derivation path from BIP32 tab: " + derivationPath);
14833 return derivationPath;
14834 }
14835 else {
14836 console.log("Unknown derivation path");
14837 }
14838 }
14839
ebd8d4e8
IC
14840 function findDerivationPathErrors(path) {
14841 // TODO
14842 return false;
14843 }
14844
14845 function displayBip32Info() {
14846 // Display the key
73161a92 14847 DOM.seed.val(seed);
ebd8d4e8
IC
14848 var rootKey = bip32RootKey.toBase58();
14849 DOM.rootKey.val(rootKey);
14850 var extendedPrivKey = bip32ExtendedKey.toBase58();
14851 DOM.extendedPrivKey.val(extendedPrivKey);
14852 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14853 DOM.extendedPubKey.val(extendedPubKey);
14854 // Display the addresses and privkeys
14855 clearAddressesList();
14856 displayAddresses(0, 20);
14857 }
14858
14859 function displayAddresses(start, total) {
14860 for (var i=0; i<total; i++) {
80c4dd2a
IC
14861 var index = i + start;
14862 new TableRow(index);
14863 }
14864 }
14865
14866 function TableRow(index) {
14867
14868 function init() {
14869 calculateValues();
14870 }
14871
14872 function calculateValues() {
14873 setTimeout(function() {
14874 var key = bip32ExtendedKey.derive(index);
14875 var address = key.getAddress().toString();
14876 var privkey = key.privKey.toWIF(network);
38523d36
IC
14877 var indexText = getDerivationPath() + "/" + index;
14878 addAddressToList(indexText, address, privkey);
80c4dd2a 14879 }, 50)
ebd8d4e8 14880 }
80c4dd2a
IC
14881
14882 init();
14883
ebd8d4e8
IC
14884 }
14885
14886 function showMore() {
14887 var start = DOM.addresses.children().length;
14888 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14889 if (isNaN(rowsToAdd)) {
14890 rowsToAdd = 20;
14891 DOM.rowsToAdd.val("20");
14892 }
14893 if (rowsToAdd > 200) {
14894 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14895 msg += "Do you want to continue?";
14896 if (!confirm(msg)) {
14897 return;
14898 }
14899 }
ebd8d4e8 14900 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
14901 }
14902
14903 function clearDisplay() {
14904 clearAddressesList();
14905 clearKey();
14906 hideValidationError();
14907 }
14908
14909 function clearAddressesList() {
14910 DOM.addresses.empty();
14911 }
14912
14913 function clearKey() {
14914 DOM.rootKey.val("");
14915 DOM.extendedPrivKey.val("");
14916 DOM.extendedPubKey.val("");
14917 }
14918
38523d36 14919 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 14920 var row = $(addressRowTemplate.html());
80c4dd2a
IC
14921 // Elements
14922 var indexCell = row.find(".index span");
14923 var addressCell = row.find(".address span");
14924 var privkeyCell = row.find(".privkey span");
14925 // Content
ae30fed8 14926 indexCell.text(indexText);
80c4dd2a
IC
14927 addressCell.text(address);
14928 privkeyCell.text(privkey);
14929 // Visibility
14930 if (!showIndex) {
14931 indexCell.addClass("invisible");
14932 }
14933 if (!showAddress) {
14934 addressCell.addClass("invisible");
14935 }
14936 if (!showPrivKey) {
6d628db7 14937 privkeyCell.addClass("invisible");
80c4dd2a 14938 }
ebd8d4e8
IC
14939 DOM.addresses.append(row);
14940 }
14941
14942 function hasStrongRandom() {
14943 return 'crypto' in window && window['crypto'] !== null;
14944 }
14945
14946 function disableForms() {
14947 $("form").on("submit", function(e) {
14948 e.preventDefault();
14949 });
14950 }
14951
ebd8d4e8
IC
14952 function parseIntNoNaN(val, defaultVal) {
14953 var v = parseInt(val);
14954 if (isNaN(v)) {
14955 return defaultVal;
14956 }
14957 return v;
14958 }
14959
14960 function showPending() {
14961 DOM.feedback
14962 .text("Calculating...")
14963 .show();
14964 }
14965
14966 function hidePending() {
14967 DOM.feedback
14968 .text("")
14969 .hide();
14970 }
14971
ab78acc6
IC
14972 function populateNetworkSelect() {
14973 for (var i=0; i<networks.length; i++) {
14974 var network = networks[i];
14975 var option = $("<option>");
14976 option.attr("value", i);
14977 option.text(network.name);
14978 DOM.phraseNetwork.append(option);
14979 }
14980 }
14981
14982 var networks = [
14983 {
14984 name: "Bitcoin",
14985 onSelect: function() {
14986 network = bitcoin.networks.bitcoin;
14987 DOM.bip44coin.val(0);
ab78acc6
IC
14988 },
14989 },
14990 {
14991 name: "Bitcoin Testnet",
14992 onSelect: function() {
14993 network = bitcoin.networks.testnet;
14994 DOM.bip44coin.val(1);
ab78acc6
IC
14995 },
14996 },
14997 {
14998 name: "Litecoin",
14999 onSelect: function() {
15000 network = bitcoin.networks.litecoin;
15001 DOM.bip44coin.val(2);
15002 },
15003 },
15004 {
15005 name: "Dogecoin",
15006 onSelect: function() {
15007 network = bitcoin.networks.dogecoin;
15008 DOM.bip44coin.val(3);
15009 },
15010 },
d5dc92fd
IC
15011 {
15012 name: "ShadowCash",
15013 onSelect: function() {
15014 network = bitcoin.networks.shadow;
15015 DOM.bip44coin.val(35);
15016 },
15017 },
15018 {
15019 name: "ShadowCash Testnet",
15020 onSelect: function() {
15021 network = bitcoin.networks.shadowtn;
15022 DOM.bip44coin.val(1);
15023 },
15024 },
a3baa26e
IC
15025 {
15026 name: "Viacoin",
15027 onSelect: function() {
15028 network = bitcoin.networks.viacoin;
15029 DOM.bip44coin.val(14);
15030 },
15031 },
15032 {
15033 name: "Viacoin Testnet",
15034 onSelect: function() {
15035 network = bitcoin.networks.viacointestnet;
15036 DOM.bip44coin.val(1);
15037 },
15038 },
15039 {
15040 name: "Jumbucks",
15041 onSelect: function() {
15042 network = bitcoin.networks.jumbucks;
15043 DOM.bip44coin.val(26);
15044 },
15045 },
5c434a8a
CM
15046 {
15047 name: "CLAM",
15048 onSelect: function() {
15049 network = bitcoin.networks.clam;
15050 DOM.bip44coin.val(23);
15051 },
15052 },
ab78acc6
IC
15053 ]
15054
ebd8d4e8
IC
15055 init();
15056
15057})();
dc55c6b0 15058</script>
ebd8d4e8
IC
15059 </body>
15060</html>