4 <meta charset=
"utf-8" />
5 <title>BIP39 - Mnemonic Code
</title>
7 * Bootstrap v3.2
.0 (http://getbootstrap.com)
8 * Copyright
2011-
2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0
.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:
100%;-ms-text-size-adjust:
100%}body{margin:
0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:
0}[hidden],template{display:none}a{background:
0 0}a:active,a:hover{outline:
0}abbr[title]{border-bottom:
1px dotted}b,strong{font-weight:
700}dfn{font-style:italic}h1{margin:
.67em
0;font-size:
2em}mark{color:#
000;background:#ff0}small{font-size:
80%}sub,sup{position:relative;font-size:
75%;line-height:
0;vertical-align:baseline}sup{top:-
.5em}sub{bottom:-
.25em}img{border:
0}svg:not(:root){overflow:hidden}figure{margin:
1em
40px}hr{height:
0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:
1em}button,input,optgroup,select,textarea{margin:
0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:
0;border:
0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:
0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:
.35em
.625em
.75em;margin:
0 2px;border:
1px solid silver}legend{padding:
0;border:
0}textarea{overflow:auto}optgroup{font-weight:
700}table{border-spacing:
0;border-collapse:collapse}td,th{padding:
0}@media print{*{color:#
000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:
1px solid #
999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:
100%!important}p,h2,h3{orphans:
3;widows:
3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn
>.caret,.dropup
>.btn
>.caret{border-top-color:#
000!important}.label{border:
1px solid #
000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:
1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:
1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:
400;line-height:
1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\
2a"}.glyphicon-plus:before{content:"\
2b"}.glyphicon-euro:before{content:"\
20ac"}.glyphicon-minus:before{content:"\
2212"}.glyphicon-cloud:before{content:"\
2601"}.glyphicon-envelope:before{content:"\
2709"}.glyphicon-pencil:before{content:"\
270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-
5-
1:before{content:"\e191"}.glyphicon-sound-
6-
1:before{content:"\e192"}.glyphicon-sound-
7-
1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:
10px;-webkit-tap-highlight-color:rgba(
0,
0,
0,
0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:
14px;line-height:
1.42857143;color:#
333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#
428bca;text-decoration:none}a:hover,a:focus{color:#
2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}figure{margin:
0}img{vertical-align:middle}.img-responsive,.thumbnail
>img,.thumbnail a
>img,.carousel-inner
>.item
>img,.carousel-inner
>.item
>a
>img{display:block;width:
100% \
9;max-width:
100%;height:auto}.img-rounded{border-radius:
6px}.img-thumbnail{display:inline-block;width:
100% \
9;max-width:
100%;height:auto;padding:
4px;line-height:
1.42857143;background-color:#fff;border:
1px solid #ddd;border-radius:
4px;-webkit-transition:all
.2s ease-in-out;-o-transition:all
.2s ease-in-out;transition:all
.2s ease-in-out}.img-circle{border-radius:
50%}hr{margin-top:
20px;margin-bottom:
20px;border:
0;border-top:
1px solid #eee}.sr-only{position:absolute;width:
1px;height:
1px;padding:
0;margin:-
1px;overflow:hidden;clip:rect(
0,
0,
0,
0);border:
0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:
0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:
500;line-height:
1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:
400;line-height:
1;color:#
777}h1,.h1,h2,.h2,h3,.h3{margin-top:
20px;margin-bottom:
10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:
65%}h4,.h4,h5,.h5,h6,.h6{margin-top:
10px;margin-bottom:
10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:
75%}h1,.h1{font-size:
36px}h2,.h2{font-size:
30px}h3,.h3{font-size:
24px}h4,.h4{font-size:
18px}h5,.h5{font-size:
14px}h6,.h6{font-size:
12px}p{margin:
0 0 10px}.lead{margin-bottom:
20px;font-size:
16px;font-weight:
300;line-height:
1.4}@media (min-width:
768px){.lead{font-size:
21px}}small,.small{font-size:
85%}cite{font-style:normal}mark,.mark{padding:
.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#
777}.text-primary{color:#
428bca}a.text-primary:hover{color:#
3071a9}.text-success{color:#
3c763d}a.text-success:hover{color:#
2b542c}.text-info{color:#
31708f}a.text-info:hover{color:#
245269}.text-warning{color:#
8a6d3b}a.text-warning:hover{color:#
66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#
843534}.bg-primary{color:#fff;background-color:#
428bca}a.bg-primary:hover{background-color:#
3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:
9px;margin:
40px
0 20px;border-bottom:
1px solid #eee}ul,ol{margin-top:
0;margin-bottom:
10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:
0}.list-unstyled{padding-left:
0;list-style:none}.list-inline{padding-left:
0;margin-left:-
5px;list-style:none}.list-inline
>li{display:inline-block;padding-right:
5px;padding-left:
5px}dl{margin-top:
0;margin-bottom:
20px}dt,dd{line-height:
1.42857143}dt{font-weight:
700}dd{margin-left:
0}@media (min-width:
768px){.dl-horizontal dt{float:left;width:
160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:
180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:
1px dotted #
777}.initialism{font-size:
90%;text-transform:uppercase}blockquote{padding:
10px
20px;margin:
0 0 20px;font-size:
17.5px;border-left:
5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:
0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:
80%;line-height:
1.42857143;color:#
777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\
2014 \
00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:
15px;padding-left:
0;text-align:right;border-right:
5px solid #eee;border-left:
0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\
00A0 \
2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:
20px;font-style:normal;line-height:
1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:
2px
4px;font-size:
90%;color:#c7254e;background-color:#f9f2f4;border-radius:
4px}kbd{padding:
2px
4px;font-size:
90%;color:#fff;background-color:#
333;border-radius:
3px;-webkit-box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.25);box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.25)}kbd kbd{padding:
0;font-size:
100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:
9.5px;margin:
0 0 10px;font-size:
13px;line-height:
1.42857143;color:#
333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:
1px solid #ccc;border-radius:
4px}pre code{padding:
0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:
0}.pre-scrollable{max-height:
340px;overflow-y:scroll}.container{padding-right:
15px;padding-left:
15px;margin-right:auto;margin-left:auto}@media (min-width:
768px){.container{width:
750px}}@media (min-width:
992px){.container{width:
970px}}@media (min-width:
1200px){.container{width:
1170px}}.container-fluid{padding-right:
15px;padding-left:
15px;margin-right:auto;margin-left:auto}.row{margin-right:-
15px;margin-left:-
15px}.col-xs-
1,.col-sm-
1,.col-md-
1,.col-lg-
1,.col-xs-
2,.col-sm-
2,.col-md-
2,.col-lg-
2,.col-xs-
3,.col-sm-
3,.col-md-
3,.col-lg-
3,.col-xs-
4,.col-sm-
4,.col-md-
4,.col-lg-
4,.col-xs-
5,.col-sm-
5,.col-md-
5,.col-lg-
5,.col-xs-
6,.col-sm-
6,.col-md-
6,.col-lg-
6,.col-xs-
7,.col-sm-
7,.col-md-
7,.col-lg-
7,.col-xs-
8,.col-sm-
8,.col-md-
8,.col-lg-
8,.col-xs-
9,.col-sm-
9,.col-md-
9,.col-lg-
9,.col-xs-
10,.col-sm-
10,.col-md-
10,.col-lg-
10,.col-xs-
11,.col-sm-
11,.col-md-
11,.col-lg-
11,.col-xs-
12,.col-sm-
12,.col-md-
12,.col-lg-
12{position:relative;min-height:
1px;padding-right:
15px;padding-left:
15px}.col-xs-
1,.col-xs-
2,.col-xs-
3,.col-xs-
4,.col-xs-
5,.col-xs-
6,.col-xs-
7,.col-xs-
8,.col-xs-
9,.col-xs-
10,.col-xs-
11,.col-xs-
12{float:left}.col-xs-
12{width:
100%}.col-xs-
11{width:
91.66666667%}.col-xs-
10{width:
83.33333333%}.col-xs-
9{width:
75%}.col-xs-
8{width:
66.66666667%}.col-xs-
7{width:
58.33333333%}.col-xs-
6{width:
50%}.col-xs-
5{width:
41.66666667%}.col-xs-
4{width:
33.33333333%}.col-xs-
3{width:
25%}.col-xs-
2{width:
16.66666667%}.col-xs-
1{width:
8.33333333%}.col-xs-pull-
12{right:
100%}.col-xs-pull-
11{right:
91.66666667%}.col-xs-pull-
10{right:
83.33333333%}.col-xs-pull-
9{right:
75%}.col-xs-pull-
8{right:
66.66666667%}.col-xs-pull-
7{right:
58.33333333%}.col-xs-pull-
6{right:
50%}.col-xs-pull-
5{right:
41.66666667%}.col-xs-pull-
4{right:
33.33333333%}.col-xs-pull-
3{right:
25%}.col-xs-pull-
2{right:
16.66666667%}.col-xs-pull-
1{right:
8.33333333%}.col-xs-pull-
0{right:auto}.col-xs-push-
12{left:
100%}.col-xs-push-
11{left:
91.66666667%}.col-xs-push-
10{left:
83.33333333%}.col-xs-push-
9{left:
75%}.col-xs-push-
8{left:
66.66666667%}.col-xs-push-
7{left:
58.33333333%}.col-xs-push-
6{left:
50%}.col-xs-push-
5{left:
41.66666667%}.col-xs-push-
4{left:
33.33333333%}.col-xs-push-
3{left:
25%}.col-xs-push-
2{left:
16.66666667%}.col-xs-push-
1{left:
8.33333333%}.col-xs-push-
0{left:auto}.col-xs-offset-
12{margin-left:
100%}.col-xs-offset-
11{margin-left:
91.66666667%}.col-xs-offset-
10{margin-left:
83.33333333%}.col-xs-offset-
9{margin-left:
75%}.col-xs-offset-
8{margin-left:
66.66666667%}.col-xs-offset-
7{margin-left:
58.33333333%}.col-xs-offset-
6{margin-left:
50%}.col-xs-offset-
5{margin-left:
41.66666667%}.col-xs-offset-
4{margin-left:
33.33333333%}.col-xs-offset-
3{margin-left:
25%}.col-xs-offset-
2{margin-left:
16.66666667%}.col-xs-offset-
1{margin-left:
8.33333333%}.col-xs-offset-
0{margin-left:
0}@media (min-width:
768px){.col-sm-
1,.col-sm-
2,.col-sm-
3,.col-sm-
4,.col-sm-
5,.col-sm-
6,.col-sm-
7,.col-sm-
8,.col-sm-
9,.col-sm-
10,.col-sm-
11,.col-sm-
12{float:left}.col-sm-
12{width:
100%}.col-sm-
11{width:
91.66666667%}.col-sm-
10{width:
83.33333333%}.col-sm-
9{width:
75%}.col-sm-
8{width:
66.66666667%}.col-sm-
7{width:
58.33333333%}.col-sm-
6{width:
50%}.col-sm-
5{width:
41.66666667%}.col-sm-
4{width:
33.33333333%}.col-sm-
3{width:
25%}.col-sm-
2{width:
16.66666667%}.col-sm-
1{width:
8.33333333%}.col-sm-pull-
12{right:
100%}.col-sm-pull-
11{right:
91.66666667%}.col-sm-pull-
10{right:
83.33333333%}.col-sm-pull-
9{right:
75%}.col-sm-pull-
8{right:
66.66666667%}.col-sm-pull-
7{right:
58.33333333%}.col-sm-pull-
6{right:
50%}.col-sm-pull-
5{right:
41.66666667%}.col-sm-pull-
4{right:
33.33333333%}.col-sm-pull-
3{right:
25%}.col-sm-pull-
2{right:
16.66666667%}.col-sm-pull-
1{right:
8.33333333%}.col-sm-pull-
0{right:auto}.col-sm-push-
12{left:
100%}.col-sm-push-
11{left:
91.66666667%}.col-sm-push-
10{left:
83.33333333%}.col-sm-push-
9{left:
75%}.col-sm-push-
8{left:
66.66666667%}.col-sm-push-
7{left:
58.33333333%}.col-sm-push-
6{left:
50%}.col-sm-push-
5{left:
41.66666667%}.col-sm-push-
4{left:
33.33333333%}.col-sm-push-
3{left:
25%}.col-sm-push-
2{left:
16.66666667%}.col-sm-push-
1{left:
8.33333333%}.col-sm-push-
0{left:auto}.col-sm-offset-
12{margin-left:
100%}.col-sm-offset-
11{margin-left:
91.66666667%}.col-sm-offset-
10{margin-left:
83.33333333%}.col-sm-offset-
9{margin-left:
75%}.col-sm-offset-
8{margin-left:
66.66666667%}.col-sm-offset-
7{margin-left:
58.33333333%}.col-sm-offset-
6{margin-left:
50%}.col-sm-offset-
5{margin-left:
41.66666667%}.col-sm-offset-
4{margin-left:
33.33333333%}.col-sm-offset-
3{margin-left:
25%}.col-sm-offset-
2{margin-left:
16.66666667%}.col-sm-offset-
1{margin-left:
8.33333333%}.col-sm-offset-
0{margin-left:
0}}@media (min-width:
992px){.col-md-
1,.col-md-
2,.col-md-
3,.col-md-
4,.col-md-
5,.col-md-
6,.col-md-
7,.col-md-
8,.col-md-
9,.col-md-
10,.col-md-
11,.col-md-
12{float:left}.col-md-
12{width:
100%}.col-md-
11{width:
91.66666667%}.col-md-
10{width:
83.33333333%}.col-md-
9{width:
75%}.col-md-
8{width:
66.66666667%}.col-md-
7{width:
58.33333333%}.col-md-
6{width:
50%}.col-md-
5{width:
41.66666667%}.col-md-
4{width:
33.33333333%}.col-md-
3{width:
25%}.col-md-
2{width:
16.66666667%}.col-md-
1{width:
8.33333333%}.col-md-pull-
12{right:
100%}.col-md-pull-
11{right:
91.66666667%}.col-md-pull-
10{right:
83.33333333%}.col-md-pull-
9{right:
75%}.col-md-pull-
8{right:
66.66666667%}.col-md-pull-
7{right:
58.33333333%}.col-md-pull-
6{right:
50%}.col-md-pull-
5{right:
41.66666667%}.col-md-pull-
4{right:
33.33333333%}.col-md-pull-
3{right:
25%}.col-md-pull-
2{right:
16.66666667%}.col-md-pull-
1{right:
8.33333333%}.col-md-pull-
0{right:auto}.col-md-push-
12{left:
100%}.col-md-push-
11{left:
91.66666667%}.col-md-push-
10{left:
83.33333333%}.col-md-push-
9{left:
75%}.col-md-push-
8{left:
66.66666667%}.col-md-push-
7{left:
58.33333333%}.col-md-push-
6{left:
50%}.col-md-push-
5{left:
41.66666667%}.col-md-push-
4{left:
33.33333333%}.col-md-push-
3{left:
25%}.col-md-push-
2{left:
16.66666667%}.col-md-push-
1{left:
8.33333333%}.col-md-push-
0{left:auto}.col-md-offset-
12{margin-left:
100%}.col-md-offset-
11{margin-left:
91.66666667%}.col-md-offset-
10{margin-left:
83.33333333%}.col-md-offset-
9{margin-left:
75%}.col-md-offset-
8{margin-left:
66.66666667%}.col-md-offset-
7{margin-left:
58.33333333%}.col-md-offset-
6{margin-left:
50%}.col-md-offset-
5{margin-left:
41.66666667%}.col-md-offset-
4{margin-left:
33.33333333%}.col-md-offset-
3{margin-left:
25%}.col-md-offset-
2{margin-left:
16.66666667%}.col-md-offset-
1{margin-left:
8.33333333%}.col-md-offset-
0{margin-left:
0}}@media (min-width:
1200px){.col-lg-
1,.col-lg-
2,.col-lg-
3,.col-lg-
4,.col-lg-
5,.col-lg-
6,.col-lg-
7,.col-lg-
8,.col-lg-
9,.col-lg-
10,.col-lg-
11,.col-lg-
12{float:left}.col-lg-
12{width:
100%}.col-lg-
11{width:
91.66666667%}.col-lg-
10{width:
83.33333333%}.col-lg-
9{width:
75%}.col-lg-
8{width:
66.66666667%}.col-lg-
7{width:
58.33333333%}.col-lg-
6{width:
50%}.col-lg-
5{width:
41.66666667%}.col-lg-
4{width:
33.33333333%}.col-lg-
3{width:
25%}.col-lg-
2{width:
16.66666667%}.col-lg-
1{width:
8.33333333%}.col-lg-pull-
12{right:
100%}.col-lg-pull-
11{right:
91.66666667%}.col-lg-pull-
10{right:
83.33333333%}.col-lg-pull-
9{right:
75%}.col-lg-pull-
8{right:
66.66666667%}.col-lg-pull-
7{right:
58.33333333%}.col-lg-pull-
6{right:
50%}.col-lg-pull-
5{right:
41.66666667%}.col-lg-pull-
4{right:
33.33333333%}.col-lg-pull-
3{right:
25%}.col-lg-pull-
2{right:
16.66666667%}.col-lg-pull-
1{right:
8.33333333%}.col-lg-pull-
0{right:auto}.col-lg-push-
12{left:
100%}.col-lg-push-
11{left:
91.66666667%}.col-lg-push-
10{left:
83.33333333%}.col-lg-push-
9{left:
75%}.col-lg-push-
8{left:
66.66666667%}.col-lg-push-
7{left:
58.33333333%}.col-lg-push-
6{left:
50%}.col-lg-push-
5{left:
41.66666667%}.col-lg-push-
4{left:
33.33333333%}.col-lg-push-
3{left:
25%}.col-lg-push-
2{left:
16.66666667%}.col-lg-push-
1{left:
8.33333333%}.col-lg-push-
0{left:auto}.col-lg-offset-
12{margin-left:
100%}.col-lg-offset-
11{margin-left:
91.66666667%}.col-lg-offset-
10{margin-left:
83.33333333%}.col-lg-offset-
9{margin-left:
75%}.col-lg-offset-
8{margin-left:
66.66666667%}.col-lg-offset-
7{margin-left:
58.33333333%}.col-lg-offset-
6{margin-left:
50%}.col-lg-offset-
5{margin-left:
41.66666667%}.col-lg-offset-
4{margin-left:
33.33333333%}.col-lg-offset-
3{margin-left:
25%}.col-lg-offset-
2{margin-left:
16.66666667%}.col-lg-offset-
1{margin-left:
8.33333333%}.col-lg-offset-
0{margin-left:
0}}table{background-color:transparent}th{text-align:left}.table{width:
100%;max-width:
100%;margin-bottom:
20px}.table
>thead
>tr
>th,.table
>tbody
>tr
>th,.table
>tfoot
>tr
>th,.table
>thead
>tr
>td,.table
>tbody
>tr
>td,.table
>tfoot
>tr
>td{padding:
8px;line-height:
1.42857143;vertical-align:top;border-top:
1px solid #ddd}.table
>thead
>tr
>th{vertical-align:bottom;border-bottom:
2px solid #ddd}.table
>caption+thead
>tr:first-child
>th,.table
>colgroup+thead
>tr:first-child
>th,.table
>thead:first-child
>tr:first-child
>th,.table
>caption+thead
>tr:first-child
>td,.table
>colgroup+thead
>tr:first-child
>td,.table
>thead:first-child
>tr:first-child
>td{border-top:
0}.table
>tbody+tbody{border-top:
2px solid #ddd}.table .table{background-color:#fff}.table-condensed
>thead
>tr
>th,.table-condensed
>tbody
>tr
>th,.table-condensed
>tfoot
>tr
>th,.table-condensed
>thead
>tr
>td,.table-condensed
>tbody
>tr
>td,.table-condensed
>tfoot
>tr
>td{padding:
5px}.table-bordered{border:
1px solid #ddd}.table-bordered
>thead
>tr
>th,.table-bordered
>tbody
>tr
>th,.table-bordered
>tfoot
>tr
>th,.table-bordered
>thead
>tr
>td,.table-bordered
>tbody
>tr
>td,.table-bordered
>tfoot
>tr
>td{border:
1px solid #ddd}.table-bordered
>thead
>tr
>th,.table-bordered
>thead
>tr
>td{border-bottom-width:
2px}.table-striped
>tbody
>tr:nth-child(odd)
>td,.table-striped
>tbody
>tr:nth-child(odd)
>th{background-color:#f9f9f9}.table-hover
>tbody
>tr:hover
>td,.table-hover
>tbody
>tr:hover
>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table
>thead
>tr
>td.active,.table
>tbody
>tr
>td.active,.table
>tfoot
>tr
>td.active,.table
>thead
>tr
>th.active,.table
>tbody
>tr
>th.active,.table
>tfoot
>tr
>th.active,.table
>thead
>tr.active
>td,.table
>tbody
>tr.active
>td,.table
>tfoot
>tr.active
>td,.table
>thead
>tr.active
>th,.table
>tbody
>tr.active
>th,.table
>tfoot
>tr.active
>th{background-color:#f5f5f5}.table-hover
>tbody
>tr
>td.active:hover,.table-hover
>tbody
>tr
>th.active:hover,.table-hover
>tbody
>tr.active:hover
>td,.table-hover
>tbody
>tr:hover
>.active,.table-hover
>tbody
>tr.active:hover
>th{background-color:#e8e8e8}.table
>thead
>tr
>td.success,.table
>tbody
>tr
>td.success,.table
>tfoot
>tr
>td.success,.table
>thead
>tr
>th.success,.table
>tbody
>tr
>th.success,.table
>tfoot
>tr
>th.success,.table
>thead
>tr.success
>td,.table
>tbody
>tr.success
>td,.table
>tfoot
>tr.success
>td,.table
>thead
>tr.success
>th,.table
>tbody
>tr.success
>th,.table
>tfoot
>tr.success
>th{background-color:#dff0d8}.table-hover
>tbody
>tr
>td.success:hover,.table-hover
>tbody
>tr
>th.success:hover,.table-hover
>tbody
>tr.success:hover
>td,.table-hover
>tbody
>tr:hover
>.success,.table-hover
>tbody
>tr.success:hover
>th{background-color:#d0e9c6}.table
>thead
>tr
>td.info,.table
>tbody
>tr
>td.info,.table
>tfoot
>tr
>td.info,.table
>thead
>tr
>th.info,.table
>tbody
>tr
>th.info,.table
>tfoot
>tr
>th.info,.table
>thead
>tr.info
>td,.table
>tbody
>tr.info
>td,.table
>tfoot
>tr.info
>td,.table
>thead
>tr.info
>th,.table
>tbody
>tr.info
>th,.table
>tfoot
>tr.info
>th{background-color:#d9edf7}.table-hover
>tbody
>tr
>td.info:hover,.table-hover
>tbody
>tr
>th.info:hover,.table-hover
>tbody
>tr.info:hover
>td,.table-hover
>tbody
>tr:hover
>.info,.table-hover
>tbody
>tr.info:hover
>th{background-color:#c4e3f3}.table
>thead
>tr
>td.warning,.table
>tbody
>tr
>td.warning,.table
>tfoot
>tr
>td.warning,.table
>thead
>tr
>th.warning,.table
>tbody
>tr
>th.warning,.table
>tfoot
>tr
>th.warning,.table
>thead
>tr.warning
>td,.table
>tbody
>tr.warning
>td,.table
>tfoot
>tr.warning
>td,.table
>thead
>tr.warning
>th,.table
>tbody
>tr.warning
>th,.table
>tfoot
>tr.warning
>th{background-color:#fcf8e3}.table-hover
>tbody
>tr
>td.warning:hover,.table-hover
>tbody
>tr
>th.warning:hover,.table-hover
>tbody
>tr.warning:hover
>td,.table-hover
>tbody
>tr:hover
>.warning,.table-hover
>tbody
>tr.warning:hover
>th{background-color:#faf2cc}.table
>thead
>tr
>td.danger,.table
>tbody
>tr
>td.danger,.table
>tfoot
>tr
>td.danger,.table
>thead
>tr
>th.danger,.table
>tbody
>tr
>th.danger,.table
>tfoot
>tr
>th.danger,.table
>thead
>tr.danger
>td,.table
>tbody
>tr.danger
>td,.table
>tfoot
>tr.danger
>td,.table
>thead
>tr.danger
>th,.table
>tbody
>tr.danger
>th,.table
>tfoot
>tr.danger
>th{background-color:#f2dede}.table-hover
>tbody
>tr
>td.danger:hover,.table-hover
>tbody
>tr
>th.danger:hover,.table-hover
>tbody
>tr.danger:hover
>td,.table-hover
>tbody
>tr:hover
>.danger,.table-hover
>tbody
>tr.danger:hover
>th{background-color:#ebcccc}@media screen and (max-width:
767px){.table-responsive{width:
100%;margin-bottom:
15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:
1px solid #ddd}.table-responsive
>.table{margin-bottom:
0}.table-responsive
>.table
>thead
>tr
>th,.table-responsive
>.table
>tbody
>tr
>th,.table-responsive
>.table
>tfoot
>tr
>th,.table-responsive
>.table
>thead
>tr
>td,.table-responsive
>.table
>tbody
>tr
>td,.table-responsive
>.table
>tfoot
>tr
>td{white-space:nowrap}.table-responsive
>.table-bordered{border:
0}.table-responsive
>.table-bordered
>thead
>tr
>th:first-child,.table-responsive
>.table-bordered
>tbody
>tr
>th:first-child,.table-responsive
>.table-bordered
>tfoot
>tr
>th:first-child,.table-responsive
>.table-bordered
>thead
>tr
>td:first-child,.table-responsive
>.table-bordered
>tbody
>tr
>td:first-child,.table-responsive
>.table-bordered
>tfoot
>tr
>td:first-child{border-left:
0}.table-responsive
>.table-bordered
>thead
>tr
>th:last-child,.table-responsive
>.table-bordered
>tbody
>tr
>th:last-child,.table-responsive
>.table-bordered
>tfoot
>tr
>th:last-child,.table-responsive
>.table-bordered
>thead
>tr
>td:last-child,.table-responsive
>.table-bordered
>tbody
>tr
>td:last-child,.table-responsive
>.table-bordered
>tfoot
>tr
>td:last-child{border-right:
0}.table-responsive
>.table-bordered
>tbody
>tr:last-child
>th,.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>th,.table-responsive
>.table-bordered
>tbody
>tr:last-child
>td,.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>td{border-bottom:
0}}fieldset{min-width:
0;padding:
0;margin:
0;border:
0}legend{display:block;width:
100%;padding:
0;margin-bottom:
20px;font-size:
21px;line-height:inherit;color:#
333;border:
0;border-bottom:
1px solid #e5e5e5}label{display:inline-block;max-width:
100%;margin-bottom:
5px;font-weight:
700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:
4px
0 0;margin-top:
1px \
9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:
100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}output{display:block;padding-top:
7px;font-size:
14px;line-height:
1.42857143;color:#
555}.form-control{display:block;width:
100%;height:
34px;padding:
6px
12px;font-size:
14px;line-height:
1.42857143;color:#
555;background-color:#fff;background-image:none;border:
1px solid #ccc;border-radius:
4px;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);-webkit-transition:border-color ease-in-out
.15s,-webkit-box-shadow ease-in-out
.15s;-o-transition:border-color ease-in-out
.15s,box-shadow ease-in-out
.15s;transition:border-color ease-in-out
.15s,box-shadow ease-in-out
.15s}.form-control:focus{border-color:#
66afe9;outline:
0;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 8px rgba(
102,
175,
233,
.6);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 8px rgba(
102,
175,
233,
.6)}.form-control::-moz-placeholder{color:#
777;opacity:
1}.form-control:-ms-input-placeholder{color:#
777}.form-control::-webkit-input-placeholder{color:#
777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:
1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:
34px;line-height:
1.42857143 \
0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:
30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:
46px}.form-group{margin-bottom:
15px}.radio,.checkbox{position:relative;display:block;min-height:
20px;margin-top:
10px;margin-bottom:
10px}.radio label,.checkbox label{padding-left:
20px;margin-bottom:
0;font-weight:
400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:
4px \
9;margin-left:-
20px}.radio+.radio,.checkbox+.checkbox{margin-top:-
5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:
20px;margin-bottom:
0;font-weight:
400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:
0;margin-left:
10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:
7px;padding-bottom:
7px;margin-bottom:
0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:
0;padding-left:
0}.input-sm,.form-horizontal .form-group-sm .form-control{height:
30px;padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}select.input-sm{height:
30px;line-height:
30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:
46px;padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}select.input-lg{height:
46px;line-height:
46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:
42.5px}.form-control-feedback{position:absolute;top:
25px;right:
0;z-index:
2;display:block;width:
34px;height:
34px;line-height:
34px;text-align:center}.input-lg+.form-control-feedback{width:
46px;height:
46px;line-height:
46px}.input-sm+.form-control-feedback{width:
30px;height:
30px;line-height:
30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#
3c763d}.has-success .form-control{border-color:#
3c763d;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-success .form-control:focus{border-color:#
2b542c;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #
67b168;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #
67b168}.has-success .input-group-addon{color:#
3c763d;background-color:#dff0d8;border-color:#
3c763d}.has-success .form-control-feedback{color:#
3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#
8a6d3b}.has-warning .form-control{border-color:#
8a6d3b;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-warning .form-control:focus{border-color:#
66512c;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #c0a16b;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #c0a16b}.has-warning .input-group-addon{color:#
8a6d3b;background-color:#fcf8e3;border-color:#
8a6d3b}.has-warning .form-control-feedback{color:#
8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075)}.has-error .form-control:focus{border-color:#
843534;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #ce8483;box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.075),
0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:
0}.help-block{display:block;margin-top:
5px;margin-bottom:
10px;color:#
737373}@media (min-width:
768px){.form-inline .form-group{display:inline-block;margin-bottom:
0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group
>.form-control{width:
100%}.form-inline .control-label{margin-bottom:
0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:
0;margin-bottom:
0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:
0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:
0}.form-inline .has-feedback .form-control-feedback{top:
0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:
7px;margin-top:
0;margin-bottom:
0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:
27px}.form-horizontal .form-group{margin-right:-
15px;margin-left:-
15px}@media (min-width:
768px){.form-horizontal .control-label{padding-top:
7px;margin-bottom:
0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:
0;right:
15px}@media (min-width:
768px){.form-horizontal .form-group-lg .control-label{padding-top:
14.3px}}@media (min-width:
768px){.form-horizontal .form-group-sm .control-label{padding-top:
6px}}.btn{display:inline-block;padding:
6px
12px;margin-bottom:
0;font-size:
14px;font-weight:
400;line-height:
1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:
1px solid transparent;border-radius:
4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:
5px auto -webkit-focus-ring-color;outline-offset:-
2px}.btn:hover,.btn:focus{color:#
333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:
0;-webkit-box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125);box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=
65);-webkit-box-shadow:none;box-shadow:none;opacity:
.65}.btn-default{color:#
333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open
>.dropdown-toggle.btn-default{color:#
333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open
>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#
333}.btn-primary{color:#fff;background-color:#
428bca;border-color:#
357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open
>.dropdown-toggle.btn-primary{color:#fff;background-color:#
3071a9;border-color:#
285e8e}.btn-primary:active,.btn-primary.active,.open
>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#
428bca;border-color:#
357ebd}.btn-primary .badge{color:#
428bca;background-color:#fff}.btn-success{color:#fff;background-color:#
5cb85c;border-color:#
4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open
>.dropdown-toggle.btn-success{color:#fff;background-color:#
449d44;border-color:#
398439}.btn-success:active,.btn-success.active,.open
>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#
5cb85c;border-color:#
4cae4c}.btn-success .badge{color:#
5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#
5bc0de;border-color:#
46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open
>.dropdown-toggle.btn-info{color:#fff;background-color:#
31b0d5;border-color:#
269abc}.btn-info:active,.btn-info.active,.open
>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#
5bc0de;border-color:#
46b8da}.btn-info .badge{color:#
5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open
>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open
>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open
>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open
>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:
400;color:#
428bca;cursor:pointer;border-radius:
0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#
2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#
777;text-decoration:none}.btn-lg,.btn-group-lg
>.btn{padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}.btn-sm,.btn-group-sm
>.btn{padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}.btn-xs,.btn-group-xs
>.btn{padding:
1px
5px;font-size:
12px;line-height:
1.5;border-radius:
3px}.btn-block{display:block;width:
100%}.btn-block+.btn-block{margin-top:
5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:
100%}.fade{opacity:
0;-webkit-transition:opacity
.15s linear;-o-transition:opacity
.15s linear;transition:opacity
.15s linear}.fade.in{opacity:
1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:
0;overflow:hidden;-webkit-transition:height
.35s ease;-o-transition:height
.35s ease;transition:height
.35s ease}.caret{display:inline-block;width:
0;height:
0;margin-left:
2px;vertical-align:middle;border-top:
4px solid;border-right:
4px solid transparent;border-left:
4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:
0}.dropdown-menu{position:absolute;top:
100%;left:
0;z-index:
1000;display:none;float:left;min-width:
160px;padding:
5px
0;margin:
2px
0 0;font-size:
14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #ccc;border:
1px solid rgba(
0,
0,
0,
.15);border-radius:
4px;-webkit-box-shadow:
0 6px
12px rgba(
0,
0,
0,
.175);box-shadow:
0 6px
12px rgba(
0,
0,
0,
.175)}.dropdown-menu.pull-right{right:
0;left:auto}.dropdown-menu .divider{height:
1px;margin:
9px
0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu
>li
>a{display:block;padding:
3px
20px;clear:both;font-weight:
400;line-height:
1.42857143;color:#
333;white-space:nowrap}.dropdown-menu
>li
>a:hover,.dropdown-menu
>li
>a:focus{color:#
262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu
>.active
>a,.dropdown-menu
>.active
>a:hover,.dropdown-menu
>.active
>a:focus{color:#fff;text-decoration:none;background-color:#
428bca;outline:
0}.dropdown-menu
>.disabled
>a,.dropdown-menu
>.disabled
>a:hover,.dropdown-menu
>.disabled
>a:focus{color:#
777}.dropdown-menu
>.disabled
>a:hover,.dropdown-menu
>.disabled
>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open
>.dropdown-menu{display:block}.open
>a{outline:
0}.dropdown-menu-right{right:
0;left:auto}.dropdown-menu-left{right:auto;left:
0}.dropdown-header{display:block;padding:
3px
20px;font-size:
12px;line-height:
1.42857143;color:#
777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
990}.pull-right
>.dropdown-menu{right:
0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:
0;border-bottom:
4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:
100%;margin-bottom:
1px}@media (min-width:
768px){.navbar-right .dropdown-menu{right:
0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:
0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group
>.btn,.btn-group-vertical
>.btn{position:relative;float:left}.btn-group
>.btn:hover,.btn-group-vertical
>.btn:hover,.btn-group
>.btn:focus,.btn-group-vertical
>.btn:focus,.btn-group
>.btn:active,.btn-group-vertical
>.btn:active,.btn-group
>.btn.active,.btn-group-vertical
>.btn.active{z-index:
2}.btn-group
>.btn:focus,.btn-group-vertical
>.btn:focus{outline:
0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-
1px}.btn-toolbar{margin-left:-
5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar
>.btn,.btn-toolbar
>.btn-group,.btn-toolbar
>.input-group{margin-left:
5px}.btn-group
>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:
0}.btn-group
>.btn:first-child{margin-left:
0}.btn-group
>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:
0;border-bottom-right-radius:
0}.btn-group
>.btn:last-child:not(:first-child),.btn-group
>.dropdown-toggle:not(:first-child){border-top-left-radius:
0;border-bottom-left-radius:
0}.btn-group
>.btn-group{float:left}.btn-group
>.btn-group:not(:first-child):not(:last-child)
>.btn{border-radius:
0}.btn-group
>.btn-group:first-child
>.btn:last-child,.btn-group
>.btn-group:first-child
>.dropdown-toggle{border-top-right-radius:
0;border-bottom-right-radius:
0}.btn-group
>.btn-group:last-child
>.btn:first-child{border-top-left-radius:
0;border-bottom-left-radius:
0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:
0}.btn-group
>.btn+.dropdown-toggle{padding-right:
8px;padding-left:
8px}.btn-group
>.btn-lg+.dropdown-toggle{padding-right:
12px;padding-left:
12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125);box-shadow:inset
0 3px
5px rgba(
0,
0,
0,
.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:
0}.btn-lg .caret{border-width:
5px
5px
0;border-bottom-width:
0}.dropup .btn-lg .caret{border-width:
0 5px
5px}.btn-group-vertical
>.btn,.btn-group-vertical
>.btn-group,.btn-group-vertical
>.btn-group
>.btn{display:block;float:none;width:
100%;max-width:
100%}.btn-group-vertical
>.btn-group
>.btn{float:none}.btn-group-vertical
>.btn+.btn,.btn-group-vertical
>.btn+.btn-group,.btn-group-vertical
>.btn-group+.btn,.btn-group-vertical
>.btn-group+.btn-group{margin-top:-
1px;margin-left:
0}.btn-group-vertical
>.btn:not(:first-child):not(:last-child){border-radius:
0}.btn-group-vertical
>.btn:first-child:not(:last-child){border-top-right-radius:
4px;border-bottom-right-radius:
0;border-bottom-left-radius:
0}.btn-group-vertical
>.btn:last-child:not(:first-child){border-top-left-radius:
0;border-top-right-radius:
0;border-bottom-left-radius:
4px}.btn-group-vertical
>.btn-group:not(:first-child):not(:last-child)
>.btn{border-radius:
0}.btn-group-vertical
>.btn-group:first-child:not(:last-child)
>.btn:last-child,.btn-group-vertical
>.btn-group:first-child:not(:last-child)
>.dropdown-toggle{border-bottom-right-radius:
0;border-bottom-left-radius:
0}.btn-group-vertical
>.btn-group:last-child:not(:first-child)
>.btn:first-child{border-top-left-radius:
0;border-top-right-radius:
0}.btn-group-justified{display:table;width:
100%;table-layout:fixed;border-collapse:separate}.btn-group-justified
>.btn,.btn-group-justified
>.btn-group{display:table-cell;float:none;width:
1%}.btn-group-justified
>.btn-group .btn{width:
100%}.btn-group-justified
>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]
>.btn
>input[type=radio],[data-toggle=buttons]
>.btn
>input[type=checkbox]{position:absolute;z-index:-
1;filter:alpha(opacity=
0);opacity:
0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:
0;padding-left:
0}.input-group .form-control{position:relative;z-index:
2;float:left;width:
100%;margin-bottom:
0}.input-group-lg
>.form-control,.input-group-lg
>.input-group-addon,.input-group-lg
>.input-group-btn
>.btn{height:
46px;padding:
10px
16px;font-size:
18px;line-height:
1.33;border-radius:
6px}select.input-group-lg
>.form-control,select.input-group-lg
>.input-group-addon,select.input-group-lg
>.input-group-btn
>.btn{height:
46px;line-height:
46px}textarea.input-group-lg
>.form-control,textarea.input-group-lg
>.input-group-addon,textarea.input-group-lg
>.input-group-btn
>.btn,select[multiple].input-group-lg
>.form-control,select[multiple].input-group-lg
>.input-group-addon,select[multiple].input-group-lg
>.input-group-btn
>.btn{height:auto}.input-group-sm
>.form-control,.input-group-sm
>.input-group-addon,.input-group-sm
>.input-group-btn
>.btn{height:
30px;padding:
5px
10px;font-size:
12px;line-height:
1.5;border-radius:
3px}select.input-group-sm
>.form-control,select.input-group-sm
>.input-group-addon,select.input-group-sm
>.input-group-btn
>.btn{height:
30px;line-height:
30px}textarea.input-group-sm
>.form-control,textarea.input-group-sm
>.input-group-addon,textarea.input-group-sm
>.input-group-btn
>.btn,select[multiple].input-group-sm
>.form-control,select[multiple].input-group-sm
>.input-group-addon,select[multiple].input-group-sm
>.input-group-btn
>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:
0}.input-group-addon,.input-group-btn{width:
1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:
6px
12px;font-size:
14px;font-weight:
400;line-height:
1;color:#
555;text-align:center;background-color:#eee;border:
1px solid #ccc;border-radius:
4px}.input-group-addon.input-sm{padding:
5px
10px;font-size:
12px;border-radius:
3px}.input-group-addon.input-lg{padding:
10px
16px;font-size:
18px;border-radius:
6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:
0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child
>.btn,.input-group-btn:first-child
>.btn-group
>.btn,.input-group-btn:first-child
>.dropdown-toggle,.input-group-btn:last-child
>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child
>.btn-group:not(:last-child)
>.btn{border-top-right-radius:
0;border-bottom-right-radius:
0}.input-group-addon:first-child{border-right:
0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child
>.btn,.input-group-btn:last-child
>.btn-group
>.btn,.input-group-btn:last-child
>.dropdown-toggle,.input-group-btn:first-child
>.btn:not(:first-child),.input-group-btn:first-child
>.btn-group:not(:first-child)
>.btn{border-top-left-radius:
0;border-bottom-left-radius:
0}.input-group-addon:last-child{border-left:
0}.input-group-btn{position:relative;font-size:
0;white-space:nowrap}.input-group-btn
>.btn{position:relative}.input-group-btn
>.btn+.btn{margin-left:-
1px}.input-group-btn
>.btn:hover,.input-group-btn
>.btn:focus,.input-group-btn
>.btn:active{z-index:
2}.input-group-btn:first-child
>.btn,.input-group-btn:first-child
>.btn-group{margin-right:-
1px}.input-group-btn:last-child
>.btn,.input-group-btn:last-child
>.btn-group{margin-left:-
1px}.nav{padding-left:
0;margin-bottom:
0;list-style:none}.nav
>li{position:relative;display:block}.nav
>li
>a{position:relative;display:block;padding:
10px
15px}.nav
>li
>a:hover,.nav
>li
>a:focus{text-decoration:none;background-color:#eee}.nav
>li.disabled
>a{color:#
777}.nav
>li.disabled
>a:hover,.nav
>li.disabled
>a:focus{color:#
777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open
>a,.nav .open
>a:hover,.nav .open
>a:focus{background-color:#eee;border-color:#
428bca}.nav .nav-divider{height:
1px;margin:
9px
0;overflow:hidden;background-color:#e5e5e5}.nav
>li
>a
>img{max-width:none}.nav-tabs{border-bottom:
1px solid #ddd}.nav-tabs
>li{float:left;margin-bottom:-
1px}.nav-tabs
>li
>a{margin-right:
2px;line-height:
1.42857143;border:
1px solid transparent;border-radius:
4px
4px
0 0}.nav-tabs
>li
>a:hover{border-color:#eee #eee #ddd}.nav-tabs
>li.active
>a,.nav-tabs
>li.active
>a:hover,.nav-tabs
>li.active
>a:focus{color:#
555;cursor:default;background-color:#fff;border:
1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:
100%;border-bottom:
0}.nav-tabs.nav-justified
>li{float:none}.nav-tabs.nav-justified
>li
>a{margin-bottom:
5px;text-align:center}.nav-tabs.nav-justified
>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:
768px){.nav-tabs.nav-justified
>li{display:table-cell;width:
1%}.nav-tabs.nav-justified
>li
>a{margin-bottom:
0}}.nav-tabs.nav-justified
>li
>a{margin-right:
0;border-radius:
4px}.nav-tabs.nav-justified
>.active
>a,.nav-tabs.nav-justified
>.active
>a:hover,.nav-tabs.nav-justified
>.active
>a:focus{border:
1px solid #ddd}@media (min-width:
768px){.nav-tabs.nav-justified
>li
>a{border-bottom:
1px solid #ddd;border-radius:
4px
4px
0 0}.nav-tabs.nav-justified
>.active
>a,.nav-tabs.nav-justified
>.active
>a:hover,.nav-tabs.nav-justified
>.active
>a:focus{border-bottom-color:#fff}}.nav-pills
>li{float:left}.nav-pills
>li
>a{border-radius:
4px}.nav-pills
>li+li{margin-left:
2px}.nav-pills
>li.active
>a,.nav-pills
>li.active
>a:hover,.nav-pills
>li.active
>a:focus{color:#fff;background-color:#
428bca}.nav-stacked
>li{float:none}.nav-stacked
>li+li{margin-top:
2px;margin-left:
0}.nav-justified{width:
100%}.nav-justified
>li{float:none}.nav-justified
>li
>a{margin-bottom:
5px;text-align:center}.nav-justified
>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:
768px){.nav-justified
>li{display:table-cell;width:
1%}.nav-justified
>li
>a{margin-bottom:
0}}.nav-tabs-justified{border-bottom:
0}.nav-tabs-justified
>li
>a{margin-right:
0;border-radius:
4px}.nav-tabs-justified
>.active
>a,.nav-tabs-justified
>.active
>a:hover,.nav-tabs-justified
>.active
>a:focus{border:
1px solid #ddd}@media (min-width:
768px){.nav-tabs-justified
>li
>a{border-bottom:
1px solid #ddd;border-radius:
4px
4px
0 0}.nav-tabs-justified
>.active
>a,.nav-tabs-justified
>.active
>a:hover,.nav-tabs-justified
>.active
>a:focus{border-bottom-color:#fff}}.tab-content
>.tab-pane{display:none}.tab-content
>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-
1px;border-top-left-radius:
0;border-top-right-radius:
0}.navbar{position:relative;min-height:
50px;margin-bottom:
20px;border:
1px solid transparent}@media (min-width:
768px){.navbar{border-radius:
4px}}@media (min-width:
768px){.navbar-header{float:left}}.navbar-collapse{padding-right:
15px;padding-left:
15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:
1px solid transparent;-webkit-box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1);box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:
768px){.navbar-collapse{width:auto;border-top:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:
0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:
0;padding-left:
0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:
340px}@media (max-width:
480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:
200px}}.container
>.navbar-header,.container-fluid
>.navbar-header,.container
>.navbar-collapse,.container-fluid
>.navbar-collapse{margin-right:-
15px;margin-left:-
15px}@media (min-width:
768px){.container
>.navbar-header,.container-fluid
>.navbar-header,.container
>.navbar-collapse,.container-fluid
>.navbar-collapse{margin-right:
0;margin-left:
0}}.navbar-static-top{z-index:
1000;border-width:
0 0 1px}@media (min-width:
768px){.navbar-static-top{border-radius:
0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:
0;left:
0;z-index:
1030;-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}@media (min-width:
768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:
0}}.navbar-fixed-top{top:
0;border-width:
0 0 1px}.navbar-fixed-bottom{bottom:
0;margin-bottom:
0;border-width:
1px
0 0}.navbar-brand{float:left;height:
50px;padding:
15px
15px;font-size:
18px;line-height:
20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:
768px){.navbar
>.container .navbar-brand,.navbar
>.container-fluid .navbar-brand{margin-left:-
15px}}.navbar-toggle{position:relative;float:right;padding:
9px
10px;margin-top:
8px;margin-right:
15px;margin-bottom:
8px;background-color:transparent;background-image:none;border:
1px solid transparent;border-radius:
4px}.navbar-toggle:focus{outline:
0}.navbar-toggle .icon-bar{display:block;width:
22px;height:
2px;border-radius:
1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:
4px}@media (min-width:
768px){.navbar-toggle{display:none}}.navbar-nav{margin:
7.5px -
15px}.navbar-nav
>li
>a{padding-top:
10px;padding-bottom:
10px;line-height:
20px}@media (max-width:
767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:
0;background-color:transparent;border:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu
>li
>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:
5px
15px
5px
25px}.navbar-nav .open .dropdown-menu
>li
>a{line-height:
20px}.navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-nav .open .dropdown-menu
>li
>a:focus{background-image:none}}@media (min-width:
768px){.navbar-nav{float:left;margin:
0}.navbar-nav
>li{float:left}.navbar-nav
>li
>a{padding-top:
15px;padding-bottom:
15px}.navbar-nav.navbar-right:last-child{margin-right:-
15px}}@media (min-width:
768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:
10px
15px;margin-top:
8px;margin-right:-
15px;margin-bottom:
8px;margin-left:-
15px;border-top:
1px solid transparent;border-bottom:
1px solid transparent;-webkit-box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1),
0 1px
0 rgba(
255,
255,
255,
.1);box-shadow:inset
0 1px
0 rgba(
255,
255,
255,
.1),
0 1px
0 rgba(
255,
255,
255,
.1)}@media (min-width:
768px){.navbar-form .form-group{display:inline-block;margin-bottom:
0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group
>.form-control{width:
100%}.navbar-form .control-label{margin-bottom:
0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:
0;margin-bottom:
0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:
0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:
0}.navbar-form .has-feedback .form-control-feedback{top:
0}}@media (max-width:
767px){.navbar-form .form-group{margin-bottom:
5px}}@media (min-width:
768px){.navbar-form{width:auto;padding-top:
0;padding-bottom:
0;margin-right:
0;margin-left:
0;border:
0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-
15px}}.navbar-nav
>li
>.dropdown-menu{margin-top:
0;border-top-left-radius:
0;border-top-right-radius:
0}.navbar-fixed-bottom .navbar-nav
>li
>.dropdown-menu{border-bottom-right-radius:
0;border-bottom-left-radius:
0}.navbar-btn{margin-top:
8px;margin-bottom:
8px}.navbar-btn.btn-sm{margin-top:
10px;margin-bottom:
10px}.navbar-btn.btn-xs{margin-top:
14px;margin-bottom:
14px}.navbar-text{margin-top:
15px;margin-bottom:
15px}@media (min-width:
768px){.navbar-text{float:left;margin-right:
15px;margin-left:
15px}.navbar-text.navbar-right:last-child{margin-right:
0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#
777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#
5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#
777}.navbar-default .navbar-nav
>li
>a{color:#
777}.navbar-default .navbar-nav
>li
>a:hover,.navbar-default .navbar-nav
>li
>a:focus{color:#
333;background-color:transparent}.navbar-default .navbar-nav
>.active
>a,.navbar-default .navbar-nav
>.active
>a:hover,.navbar-default .navbar-nav
>.active
>a:focus{color:#
555;background-color:#e7e7e7}.navbar-default .navbar-nav
>.disabled
>a,.navbar-default .navbar-nav
>.disabled
>a:hover,.navbar-default .navbar-nav
>.disabled
>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#
888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav
>.open
>a,.navbar-default .navbar-nav
>.open
>a:hover,.navbar-default .navbar-nav
>.open
>a:focus{color:#
555;background-color:#e7e7e7}@media (max-width:
767px){.navbar-default .navbar-nav .open .dropdown-menu
>li
>a{color:#
777}.navbar-default .navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>li
>a:focus{color:#
333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a,.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>.active
>a:focus{color:#
555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a,.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a:hover,.navbar-default .navbar-nav .open .dropdown-menu
>.disabled
>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#
777}.navbar-default .navbar-link:hover{color:#
333}.navbar-default .btn-link{color:#
777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#
333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#
222;border-color:#
080808}.navbar-inverse .navbar-brand{color:#
777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#
777}.navbar-inverse .navbar-nav
>li
>a{color:#
777}.navbar-inverse .navbar-nav
>li
>a:hover,.navbar-inverse .navbar-nav
>li
>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav
>.active
>a,.navbar-inverse .navbar-nav
>.active
>a:hover,.navbar-inverse .navbar-nav
>.active
>a:focus{color:#fff;background-color:#
080808}.navbar-inverse .navbar-nav
>.disabled
>a,.navbar-inverse .navbar-nav
>.disabled
>a:hover,.navbar-inverse .navbar-nav
>.disabled
>a:focus{color:#
444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#
333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#
333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#
101010}.navbar-inverse .navbar-nav
>.open
>a,.navbar-inverse .navbar-nav
>.open
>a:hover,.navbar-inverse .navbar-nav
>.open
>a:focus{color:#fff;background-color:#
080808}@media (max-width:
767px){.navbar-inverse .navbar-nav .open .dropdown-menu
>.dropdown-header{border-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a{color:#
777}.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>li
>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a,.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>.active
>a:focus{color:#fff;background-color:#
080808}.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a,.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu
>.disabled
>a:focus{color:#
444;background-color:transparent}}.navbar-inverse .navbar-link{color:#
777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#
777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#
444}.breadcrumb{padding:
8px
15px;margin-bottom:
20px;list-style:none;background-color:#f5f5f5;border-radius:
4px}.breadcrumb
>li{display:inline-block}.breadcrumb
>li+li:before{padding:
0 5px;color:#ccc;content:"/\
00a0"}.breadcrumb
>.active{color:#
777}.pagination{display:inline-block;padding-left:
0;margin:
20px
0;border-radius:
4px}.pagination
>li{display:inline}.pagination
>li
>a,.pagination
>li
>span{position:relative;float:left;padding:
6px
12px;margin-left:-
1px;line-height:
1.42857143;color:#
428bca;text-decoration:none;background-color:#fff;border:
1px solid #ddd}.pagination
>li:first-child
>a,.pagination
>li:first-child
>span{margin-left:
0;border-top-left-radius:
4px;border-bottom-left-radius:
4px}.pagination
>li:last-child
>a,.pagination
>li:last-child
>span{border-top-right-radius:
4px;border-bottom-right-radius:
4px}.pagination
>li
>a:hover,.pagination
>li
>span:hover,.pagination
>li
>a:focus,.pagination
>li
>span:focus{color:#
2a6496;background-color:#eee;border-color:#ddd}.pagination
>.active
>a,.pagination
>.active
>span,.pagination
>.active
>a:hover,.pagination
>.active
>span:hover,.pagination
>.active
>a:focus,.pagination
>.active
>span:focus{z-index:
2;color:#fff;cursor:default;background-color:#
428bca;border-color:#
428bca}.pagination
>.disabled
>span,.pagination
>.disabled
>span:hover,.pagination
>.disabled
>span:focus,.pagination
>.disabled
>a,.pagination
>.disabled
>a:hover,.pagination
>.disabled
>a:focus{color:#
777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg
>li
>a,.pagination-lg
>li
>span{padding:
10px
16px;font-size:
18px}.pagination-lg
>li:first-child
>a,.pagination-lg
>li:first-child
>span{border-top-left-radius:
6px;border-bottom-left-radius:
6px}.pagination-lg
>li:last-child
>a,.pagination-lg
>li:last-child
>span{border-top-right-radius:
6px;border-bottom-right-radius:
6px}.pagination-sm
>li
>a,.pagination-sm
>li
>span{padding:
5px
10px;font-size:
12px}.pagination-sm
>li:first-child
>a,.pagination-sm
>li:first-child
>span{border-top-left-radius:
3px;border-bottom-left-radius:
3px}.pagination-sm
>li:last-child
>a,.pagination-sm
>li:last-child
>span{border-top-right-radius:
3px;border-bottom-right-radius:
3px}.pager{padding-left:
0;margin:
20px
0;text-align:center;list-style:none}.pager li{display:inline}.pager li
>a,.pager li
>span{display:inline-block;padding:
5px
14px;background-color:#fff;border:
1px solid #ddd;border-radius:
15px}.pager li
>a:hover,.pager li
>a:focus{text-decoration:none;background-color:#eee}.pager .next
>a,.pager .next
>span{float:right}.pager .previous
>a,.pager .previous
>span{float:left}.pager .disabled
>a,.pager .disabled
>a:hover,.pager .disabled
>a:focus,.pager .disabled
>span{color:#
777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:
.2em
.6em
.3em;font-size:
75%;font-weight:
700;line-height:
1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:
.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-
1px}.label-default{background-color:#
777}.label-default[href]:hover,.label-default[href]:focus{background-color:#
5e5e5e}.label-primary{background-color:#
428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#
3071a9}.label-success{background-color:#
5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#
449d44}.label-info{background-color:#
5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#
31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:
10px;padding:
3px
7px;font-size:
12px;font-weight:
700;line-height:
1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#
777;border-radius:
10px}.badge:empty{display:none}.btn .badge{position:relative;top:-
1px}.btn-xs .badge{top:
0;padding:
1px
5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active
>.badge,.nav-pills
>.active
>a
>.badge{color:#
428bca;background-color:#fff}.nav-pills
>li
>a
>.badge{margin-left:
3px}.jumbotron{padding:
30px;margin-bottom:
30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:
15px;font-size:
21px;font-weight:
200}.jumbotron
>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:
6px}.jumbotron .container{max-width:
100%}@media screen and (min-width:
768px){.jumbotron{padding-top:
48px;padding-bottom:
48px}.container .jumbotron{padding-right:
60px;padding-left:
60px}.jumbotron h1,.jumbotron .h1{font-size:
63px}}.thumbnail{display:block;padding:
4px;margin-bottom:
20px;line-height:
1.42857143;background-color:#fff;border:
1px solid #ddd;border-radius:
4px;-webkit-transition:all
.2s ease-in-out;-o-transition:all
.2s ease-in-out;transition:all
.2s ease-in-out}.thumbnail
>img,.thumbnail a
>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#
428bca}.thumbnail .caption{padding:
9px;color:#
333}.alert{padding:
15px;margin-bottom:
20px;border:
1px solid transparent;border-radius:
4px}.alert h4{margin-top:
0;color:inherit}.alert .alert-link{font-weight:
700}.alert
>p,.alert
>ul{margin-bottom:
0}.alert
>p+p{margin-top:
5px}.alert-dismissable,.alert-dismissible{padding-right:
35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-
2px;right:-
21px;color:inherit}.alert-success{color:#
3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#
2b542c}.alert-info{color:#
31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#
245269}.alert-warning{color:#
8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#
66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#
843534}@-webkit-keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}@-o-keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}@keyframes progress-bar-stripes{from{background-position:
40px
0}to{background-position:
0 0}}.progress{height:
20px;margin-bottom:
20px;overflow:hidden;background-color:#f5f5f5;border-radius:
4px;-webkit-box-shadow:inset
0 1px
2px rgba(
0,
0,
0,
.1);box-shadow:inset
0 1px
2px rgba(
0,
0,
0,
.1)}.progress-bar{float:left;width:
0;height:
100%;font-size:
12px;line-height:
20px;color:#fff;text-align:center;background-color:#
428bca;-webkit-box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.15);box-shadow:inset
0 -
1px
0 rgba(
0,
0,
0,
.15);-webkit-transition:width
.6s ease;-o-transition:width
.6s ease;transition:width
.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);-webkit-background-size:
40px
40px;background-size:
40px
40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes
2s linear infinite;-o-animation:progress-bar-stripes
2s linear infinite;animation:progress-bar-stripes
2s linear infinite}.progress-bar[
aria-valuenow="
1"],.progress-bar[
aria-valuenow="
2"]{min-width:
30px}.progress-bar[
aria-valuenow="
0"]{min-width:
30px;color:#
777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#
5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-info{background-color:#
5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:-o-linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent);background-image:linear-gradient(
45deg,rgba(
255,
255,
255,
.15)
25%,transparent
25%,transparent
50%,rgba(
255,
255,
255,
.15)
50%,rgba(
255,
255,
255,
.15)
75%,transparent
75%,transparent)}.media,.media-body{overflow:hidden;zoom:
1}.media,.media .media{margin-top:
15px}.media:first-child{margin-top:
0}.media-object{display:block}.media-heading{margin:
0 0 5px}.media
>.pull-left{margin-right:
10px}.media
>.pull-right{margin-left:
10px}.media-list{padding-left:
0;list-style:none}.list-group{padding-left:
0;margin-bottom:
20px}.list-group-item{position:relative;display:block;padding:
10px
15px;margin-bottom:-
1px;background-color:#fff;border:
1px solid #ddd}.list-group-item:first-child{border-top-left-radius:
4px;border-top-right-radius:
4px}.list-group-item:last-child{margin-bottom:
0;border-bottom-right-radius:
4px;border-bottom-left-radius:
4px}.list-group-item
>.badge{float:right}.list-group-item
>.badge+.badge{margin-right:
5px}a.list-group-item{color:#
555}a.list-group-item .list-group-item-heading{color:#
333}a.list-group-item:hover,a.list-group-item:focus{color:#
555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#
777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#
777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:
2;color:#fff;background-color:#
428bca;border-color:#
428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading
>small,.list-group-item.active:hover .list-group-item-heading
>small,.list-group-item.active:focus .list-group-item-heading
>small,.list-group-item.active .list-group-item-heading
>.small,.list-group-item.active:hover .list-group-item-heading
>.small,.list-group-item.active:focus .list-group-item-heading
>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#
3c763d;background-color:#dff0d8}a.list-group-item-success{color:#
3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#
3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#
3c763d;border-color:#
3c763d}.list-group-item-info{color:#
31708f;background-color:#d9edf7}a.list-group-item-info{color:#
31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#
31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#
31708f;border-color:#
31708f}.list-group-item-warning{color:#
8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#
8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#
8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#
8a6d3b;border-color:#
8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:
0;margin-bottom:
5px}.list-group-item-text{margin-bottom:
0;line-height:
1.3}.panel{margin-bottom:
20px;background-color:#fff;border:
1px solid transparent;border-radius:
4px;-webkit-box-shadow:
0 1px
1px rgba(
0,
0,
0,
.05);box-shadow:
0 1px
1px rgba(
0,
0,
0,
.05)}.panel-body{padding:
15px}.panel-heading{padding:
10px
15px;border-bottom:
1px solid transparent;border-top-left-radius:
3px;border-top-right-radius:
3px}.panel-heading
>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:
0;margin-bottom:
0;font-size:
16px;color:inherit}.panel-title
>a{color:inherit}.panel-footer{padding:
10px
15px;background-color:#f5f5f5;border-top:
1px solid #ddd;border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel
>.list-group{margin-bottom:
0}.panel
>.list-group .list-group-item{border-width:
1px
0;border-radius:
0}.panel
>.list-group:first-child .list-group-item:first-child{border-top:
0;border-top-left-radius:
3px;border-top-right-radius:
3px}.panel
>.list-group:last-child .list-group-item:last-child{border-bottom:
0;border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:
0}.list-group+.panel-footer{border-top-width:
0}.panel
>.table,.panel
>.table-responsive
>.table,.panel
>.panel-collapse
>.table{margin-bottom:
0}.panel
>.table:first-child,.panel
>.table-responsive:first-child
>.table:first-child{border-top-left-radius:
3px;border-top-right-radius:
3px}.panel
>.table:first-child
>thead:first-child
>tr:first-child td:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child td:first-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child td:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child td:first-child,.panel
>.table:first-child
>thead:first-child
>tr:first-child th:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child th:first-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child th:first-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child th:first-child{border-top-left-radius:
3px}.panel
>.table:first-child
>thead:first-child
>tr:first-child td:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child td:last-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child td:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child td:last-child,.panel
>.table:first-child
>thead:first-child
>tr:first-child th:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>thead:first-child
>tr:first-child th:last-child,.panel
>.table:first-child
>tbody:first-child
>tr:first-child th:last-child,.panel
>.table-responsive:first-child
>.table:first-child
>tbody:first-child
>tr:first-child th:last-child{border-top-right-radius:
3px}.panel
>.table:last-child,.panel
>.table-responsive:last-child
>.table:last-child{border-bottom-right-radius:
3px;border-bottom-left-radius:
3px}.panel
>.table:last-child
>tbody:last-child
>tr:last-child td:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child td:first-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child td:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child td:first-child,.panel
>.table:last-child
>tbody:last-child
>tr:last-child th:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child th:first-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child th:first-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child th:first-child{border-bottom-left-radius:
3px}.panel
>.table:last-child
>tbody:last-child
>tr:last-child td:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child td:last-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child td:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child td:last-child,.panel
>.table:last-child
>tbody:last-child
>tr:last-child th:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tbody:last-child
>tr:last-child th:last-child,.panel
>.table:last-child
>tfoot:last-child
>tr:last-child th:last-child,.panel
>.table-responsive:last-child
>.table:last-child
>tfoot:last-child
>tr:last-child th:last-child{border-bottom-right-radius:
3px}.panel
>.panel-body+.table,.panel
>.panel-body+.table-responsive{border-top:
1px solid #ddd}.panel
>.table
>tbody:first-child
>tr:first-child th,.panel
>.table
>tbody:first-child
>tr:first-child td{border-top:
0}.panel
>.table-bordered,.panel
>.table-responsive
>.table-bordered{border:
0}.panel
>.table-bordered
>thead
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>th:first-child,.panel
>.table-bordered
>tbody
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>th:first-child,.panel
>.table-bordered
>tfoot
>tr
>th:first-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>th:first-child,.panel
>.table-bordered
>thead
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>td:first-child,.panel
>.table-bordered
>tbody
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>td:first-child,.panel
>.table-bordered
>tfoot
>tr
>td:first-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>td:first-child{border-left:
0}.panel
>.table-bordered
>thead
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>th:last-child,.panel
>.table-bordered
>tbody
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>th:last-child,.panel
>.table-bordered
>tfoot
>tr
>th:last-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>th:last-child,.panel
>.table-bordered
>thead
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>thead
>tr
>td:last-child,.panel
>.table-bordered
>tbody
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>tbody
>tr
>td:last-child,.panel
>.table-bordered
>tfoot
>tr
>td:last-child,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr
>td:last-child{border-right:
0}.panel
>.table-bordered
>thead
>tr:first-child
>td,.panel
>.table-responsive
>.table-bordered
>thead
>tr:first-child
>td,.panel
>.table-bordered
>tbody
>tr:first-child
>td,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:first-child
>td,.panel
>.table-bordered
>thead
>tr:first-child
>th,.panel
>.table-responsive
>.table-bordered
>thead
>tr:first-child
>th,.panel
>.table-bordered
>tbody
>tr:first-child
>th,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:first-child
>th{border-bottom:
0}.panel
>.table-bordered
>tbody
>tr:last-child
>td,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:last-child
>td,.panel
>.table-bordered
>tfoot
>tr:last-child
>td,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>td,.panel
>.table-bordered
>tbody
>tr:last-child
>th,.panel
>.table-responsive
>.table-bordered
>tbody
>tr:last-child
>th,.panel
>.table-bordered
>tfoot
>tr:last-child
>th,.panel
>.table-responsive
>.table-bordered
>tfoot
>tr:last-child
>th{border-bottom:
0}.panel
>.table-responsive{margin-bottom:
0;border:
0}.panel-group{margin-bottom:
20px}.panel-group .panel{margin-bottom:
0;border-radius:
4px}.panel-group .panel+.panel{margin-top:
5px}.panel-group .panel-heading{border-bottom:
0}.panel-group .panel-heading+.panel-collapse
>.panel-body{border-top:
1px solid #ddd}.panel-group .panel-footer{border-top:
0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:
1px solid #ddd}.panel-default{border-color:#ddd}.panel-default
>.panel-heading{color:#
333;background-color:#f5f5f5;border-color:#ddd}.panel-default
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#ddd}.panel-default
>.panel-heading .badge{color:#f5f5f5;background-color:#
333}.panel-default
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#
428bca}.panel-primary
>.panel-heading{color:#fff;background-color:#
428bca;border-color:#
428bca}.panel-primary
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#
428bca}.panel-primary
>.panel-heading .badge{color:#
428bca;background-color:#fff}.panel-primary
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#
428bca}.panel-success{border-color:#d6e9c6}.panel-success
>.panel-heading{color:#
3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#d6e9c6}.panel-success
>.panel-heading .badge{color:#dff0d8;background-color:#
3c763d}.panel-success
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info
>.panel-heading{color:#
31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#bce8f1}.panel-info
>.panel-heading .badge{color:#d9edf7;background-color:#
31708f}.panel-info
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning
>.panel-heading{color:#
8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#faebcc}.panel-warning
>.panel-heading .badge{color:#fcf8e3;background-color:#
8a6d3b}.panel-warning
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger
>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger
>.panel-heading+.panel-collapse
>.panel-body{border-top-color:#ebccd1}.panel-danger
>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger
>.panel-footer+.panel-collapse
>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:
0;padding:
0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:
0;bottom:
0;left:
0;width:
100%;height:
100%;border:
0}.embed-responsive.embed-responsive-
16by9{padding-bottom:
56.25%}.embed-responsive.embed-responsive-
4by3{padding-bottom:
75%}.well{min-height:
20px;padding:
19px;margin-bottom:
20px;background-color:#f5f5f5;border:
1px solid #e3e3e3;border-radius:
4px;-webkit-box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.05);box-shadow:inset
0 1px
1px rgba(
0,
0,
0,
.05)}.well blockquote{border-color:#ddd;border-color:rgba(
0,
0,
0,
.15)}.well-lg{padding:
24px;border-radius:
6px}.well-sm{padding:
9px;border-radius:
3px}.close{float:right;font-size:
21px;font-weight:
700;line-height:
1;color:#
000;text-shadow:
0 1px
0 #fff;filter:alpha(opacity=
20);opacity:
.2}.close:hover,.close:focus{color:#
000;text-decoration:none;cursor:pointer;filter:alpha(opacity=
50);opacity:
.5}button.close{-webkit-appearance:none;padding:
0;cursor:pointer;background:
0 0;border:
0}.modal-open{overflow:hidden}.modal{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:
0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform
.3s ease-out;-o-transition:-o-transform
.3s ease-out;transition:transform
.3s ease-out;-webkit-transform:translate3d(
0,-
25%,
0);-o-transform:translate3d(
0,-
25%,
0);transform:translate3d(
0,-
25%,
0)}.modal.in .modal-dialog{-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:
10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #
999;border:
1px solid rgba(
0,
0,
0,
.2);border-radius:
6px;outline:
0;-webkit-box-shadow:
0 3px
9px rgba(
0,
0,
0,
.5);box-shadow:
0 3px
9px rgba(
0,
0,
0,
.5)}.modal-backdrop{position:fixed;top:
0;right:
0;bottom:
0;left:
0;z-index:
1040;background-color:#
000}.modal-backdrop.fade{filter:alpha(opacity=
0);opacity:
0}.modal-backdrop.in{filter:alpha(opacity=
50);opacity:
.5}.modal-header{min-height:
16.43px;padding:
15px;border-bottom:
1px solid #e5e5e5}.modal-header .close{margin-top:-
2px}.modal-title{margin:
0;line-height:
1.42857143}.modal-body{position:relative;padding:
15px}.modal-footer{padding:
15px;text-align:right;border-top:
1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:
0;margin-left:
5px}.modal-footer .btn-group .btn+.btn{margin-left:-
1px}.modal-footer .btn-block+.btn-block{margin-left:
0}.modal-scrollbar-measure{position:absolute;top:-
9999px;width:
50px;height:
50px;overflow:scroll}@media (min-width:
768px){.modal-dialog{width:
600px;margin:
30px auto}.modal-content{-webkit-box-shadow:
0 5px
15px rgba(
0,
0,
0,
.5);box-shadow:
0 5px
15px rgba(
0,
0,
0,
.5)}.modal-sm{width:
300px}}@media (min-width:
992px){.modal-lg{width:
900px}}.tooltip{position:absolute;z-index:
1070;display:block;font-size:
12px;line-height:
1.4;visibility:visible;filter:alpha(opacity=
0);opacity:
0}.tooltip.in{filter:alpha(opacity=
90);opacity:
.9}.tooltip.top{padding:
5px
0;margin-top:-
3px}.tooltip.right{padding:
0 5px;margin-left:
3px}.tooltip.bottom{padding:
5px
0;margin-top:
3px}.tooltip.left{padding:
0 5px;margin-left:-
3px}.tooltip-inner{max-width:
200px;padding:
3px
8px;color:#fff;text-align:center;text-decoration:none;background-color:#
000;border-radius:
4px}.tooltip-arrow{position:absolute;width:
0;height:
0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:
0;left:
50%;margin-left:-
5px;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.top-left .tooltip-arrow{bottom:
0;left:
5px;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.top-right .tooltip-arrow{right:
5px;bottom:
0;border-width:
5px
5px
0;border-top-color:#
000}.tooltip.right .tooltip-arrow{top:
50%;left:
0;margin-top:-
5px;border-width:
5px
5px
5px
0;border-right-color:#
000}.tooltip.left .tooltip-arrow{top:
50%;right:
0;margin-top:-
5px;border-width:
5px
0 5px
5px;border-left-color:#
000}.tooltip.bottom .tooltip-arrow{top:
0;left:
50%;margin-left:-
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.tooltip.bottom-left .tooltip-arrow{top:
0;left:
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.tooltip.bottom-right .tooltip-arrow{top:
0;right:
5px;border-width:
0 5px
5px;border-bottom-color:#
000}.popover{position:absolute;top:
0;left:
0;z-index:
1060;display:none;max-width:
276px;padding:
1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:
1px solid #ccc;border:
1px solid rgba(
0,
0,
0,
.2);border-radius:
6px;-webkit-box-shadow:
0 5px
10px rgba(
0,
0,
0,
.2);box-shadow:
0 5px
10px rgba(
0,
0,
0,
.2)}.popover.top{margin-top:-
10px}.popover.right{margin-left:
10px}.popover.bottom{margin-top:
10px}.popover.left{margin-left:-
10px}.popover-title{padding:
8px
14px;margin:
0;font-size:
14px;font-weight:
400;line-height:
18px;background-color:#f7f7f7;border-bottom:
1px solid #ebebeb;border-radius:
5px
5px
0 0}.popover-content{padding:
9px
14px}.popover
>.arrow,.popover
>.arrow:after{position:absolute;display:block;width:
0;height:
0;border-color:transparent;border-style:solid}.popover
>.arrow{border-width:
11px}.popover
>.arrow:after{content:"";border-width:
10px}.popover.top
>.arrow{bottom:-
11px;left:
50%;margin-left:-
11px;border-top-color:#
999;border-top-color:rgba(
0,
0,
0,
.25);border-bottom-width:
0}.popover.top
>.arrow:after{bottom:
1px;margin-left:-
10px;content:" ";border-top-color:#fff;border-bottom-width:
0}.popover.right
>.arrow{top:
50%;left:-
11px;margin-top:-
11px;border-right-color:#
999;border-right-color:rgba(
0,
0,
0,
.25);border-left-width:
0}.popover.right
>.arrow:after{bottom:-
10px;left:
1px;content:" ";border-right-color:#fff;border-left-width:
0}.popover.bottom
>.arrow{top:-
11px;left:
50%;margin-left:-
11px;border-top-width:
0;border-bottom-color:#
999;border-bottom-color:rgba(
0,
0,
0,
.25)}.popover.bottom
>.arrow:after{top:
1px;margin-left:-
10px;content:" ";border-top-width:
0;border-bottom-color:#fff}.popover.left
>.arrow{top:
50%;right:-
11px;margin-top:-
11px;border-right-width:
0;border-left-color:#
999;border-left-color:rgba(
0,
0,
0,
.25)}.popover.left
>.arrow:after{right:
1px;bottom:-
10px;content:" ";border-right-width:
0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:
100%;overflow:hidden}.carousel-inner
>.item{position:relative;display:none;-webkit-transition:
.6s ease-in-out left;-o-transition:
.6s ease-in-out left;transition:
.6s ease-in-out left}.carousel-inner
>.item
>img,.carousel-inner
>.item
>a
>img{line-height:
1}.carousel-inner
>.active,.carousel-inner
>.next,.carousel-inner
>.prev{display:block}.carousel-inner
>.active{left:
0}.carousel-inner
>.next,.carousel-inner
>.prev{position:absolute;top:
0;width:
100%}.carousel-inner
>.next{left:
100%}.carousel-inner
>.prev{left:-
100%}.carousel-inner
>.next.left,.carousel-inner
>.prev.right{left:
0}.carousel-inner
>.active.left{left:-
100%}.carousel-inner
>.active.right{left:
100%}.carousel-control{position:absolute;top:
0;bottom:
0;left:
0;width:
15%;font-size:
20px;color:#fff;text-align:center;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.6);filter:alpha(opacity=
50);opacity:
.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);background-image:-o-linear-gradient(left,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(
0,
0,
0,
.5)),to(rgba(
0,
0,
0,
.0001)));background-image:linear-gradient(to right,rgba(
0,
0,
0,
.5)
0,rgba(
0,
0,
0,
.0001)
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#
80000000', endColorstr='#
00000000', GradientType=
1);background-repeat:repeat-x}.carousel-control.right{right:
0;left:auto;background-image:-webkit-linear-gradient(left,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);background-image:-o-linear-gradient(left,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(
0,
0,
0,
.0001)),to(rgba(
0,
0,
0,
.5)));background-image:linear-gradient(to right,rgba(
0,
0,
0,
.0001)
0,rgba(
0,
0,
0,
.5)
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#
00000000', endColorstr='#
80000000', GradientType=
1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=
90);outline:
0;opacity:
.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:
50%;z-index:
5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:
50%;margin-left:-
10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:
50%;margin-right:-
10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:
20px;height:
20px;margin-top:-
10px;font-family:serif}.carousel-control .icon-prev:before{content:'\
2039'}.carousel-control .icon-next:before{content:'\
203a'}.carousel-indicators{position:absolute;bottom:
10px;left:
50%;z-index:
15;width:
60%;padding-left:
0;margin-left:-
30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:
10px;height:
10px;margin:
1px;text-indent:-
999px;cursor:pointer;background-color:#
000 \
9;background-color:rgba(
0,
0,
0,
0);border:
1px solid #fff;border-radius:
10px}.carousel-indicators .active{width:
12px;height:
12px;margin:
0;background-color:#fff}.carousel-caption{position:absolute;right:
15%;bottom:
20px;left:
15%;z-index:
10;padding-top:
20px;padding-bottom:
20px;color:#fff;text-align:center;text-shadow:
0 1px
2px rgba(
0,
0,
0,
.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:
768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:
30px;height:
30px;margin-top:-
15px;font-size:
30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-
15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-
15px}.carousel-caption{right:
20%;left:
20%;padding-bottom:
30px}.carousel-indicators{bottom:
20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical
>.btn-group:before,.btn-group-vertical
>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical
>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:
0/
0 a;color:transparent;text-shadow:none;background-color:transparent;border:
0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(
0,
0,
0);-o-transform:translate3d(
0,
0,
0);transform:translate3d(
0,
0,
0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:
767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:
767px){.visible-xs-block{display:block!important}}@media (max-width:
767px){.visible-xs-inline{display:inline!important}}@media (max-width:
767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-block{display:block!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-inline{display:inline!important}}@media (min-width:
768px) and (max-width:
991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-block{display:block!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-inline{display:inline!important}}@media (min-width:
992px) and (max-width:
1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:
1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:
1200px){.visible-lg-block{display:block!important}}@media (min-width:
1200px){.visible-lg-inline{display:inline!important}}@media (min-width:
1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:
767px){.hidden-xs{display:none!important}}@media (min-width:
768px) and (max-width:
991px){.hidden-sm{display:none!important}}@media (min-width:
992px) and (max-width:
1199px){.hidden-md{display:none!important}}@media (min-width:
1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
</style>
11 <meta content=
"Mnemonic code for generating deterministic keys" name=
"description"/>
12 <meta content=
"width=device-width, initial-scale=1.0" name=
"viewport" />
13 <meta content=
"bitcoin mnemonic converter" name=
"description" />
14 <meta content=
"DC POS" name=
"author" />
20 .form-control[readonly] {
33 background-color: orange;
37 border:
2px solid #
555;
39 border-bottom-left-radius:
20px
20px;
40 border-bottom-right-radius:
20px
20px;
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);
50 <div class=
"container">
52 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
55 <div class=
"col-md-12">
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>
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>
69 <div class=
"form-group">
70 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
71 <div class=
"col-sm-10">
72 <div class=
"input-group">
73 <select id=
"strength" class=
"strength form-control">
74 <option val=
"3">3</option>
75 <option val=
"6">6</option>
76 <option val=
"9">9</option>
77 <option val=
"12">12</option>
78 <option val=
"15" selected
>15</option>
79 <option val=
"18">18</option>
80 <option val=
"21">21</option>
81 <option val=
"24">24</option>
83 <span class=
"input-group-btn">
84 <button class=
"btn generate">Generate Random Mnemonic
</button>
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>
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>
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 -->
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>
122 <div class=
"col-md-12">
123 <h2>Derivation Path
</h2>
124 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
125 <li id=
"bip44-tab" class=
"active">
126 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
129 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
132 <div class=
"derivation-type tab-content">
133 <div id=
"bip44" class=
"tab-pane active">
134 <form class=
"form-horizontal" role=
"form">
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>
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>
144 <div class=
"col-sm-10">
145 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
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>
152 <div class=
"col-sm-10">
153 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
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>
160 <div class=
"col-sm-10">
161 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
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>
168 <div class=
"col-sm-10">
169 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
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">
180 <div id=
"bip32" class=
"tab-pane">
181 <form class=
"form-horizontal" role=
"form">
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>
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">
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>
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>
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>
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>
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">
240 <div class=
"input-group">
242 <button class=
"index-toggle">Toggle
</button>
246 <div class=
"input-group">
248 <button class=
"address-toggle">Toggle
</button>
252 <div class=
"input-group">
253 Private Key
254 <button class=
"private-key-toggle">Toggle
</button>
258 <tbody class=
"addresses">
259 <tr><td> </td><td> </td><td> </td></tr>
260 <tr><td> </td><td> </td><td> </td></tr>
261 <tr><td> </td><td> </td><td> </td></tr>
262 <tr><td> </td><td> </td><td> </td></tr>
263 <tr><td> </td><td> </td><td> </td></tr>
268 <span>Show next
</button>
269 <input type=
"number" class=
"rows-to-add" value=
"20">
270 <button class=
"more">Show
</button>
275 <div class=
"col-md-12">
277 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
280 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
282 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
285 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
287 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
289 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
292 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
294 <h3>Private Keys
</h3>
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
307 <div class=
"col-md-12">
309 <h2>Offline Usage
</h2>
312 You can use this tool without having to be online.
315 In your browser, select file save-as, and save this page
319 Double-click that file to open it in a browser
320 on any offline computer.
323 Alternatively, download it from
324 <a href=
"https://github.com/dcpos/bip39">
325 https://github.com/dcpos/bip39
334 <div class=
"col-md-12">
336 <h2>This project is
100% open-source code
</h2>
339 <span>Get the source code at -
</span>
340 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
341 https://github.com/dcpos/bip39
348 <span>BitcoinJS -
</span>
349 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
350 https://github.com/bitcoinjs/bitcoinjs-lib
355 <span>jsBIP39 -
</span>
356 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
357 https://github.com/iancoleman/jsbip39
363 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
364 https://github.com/bitwiseshiftleft/sjcl
369 <span>jQuery -
</span>
370 <a href=
"https://jquery.com/" target=
"_blank">
376 <span>Twitter Bootstrap -
</span>
377 <a href=
"http://getbootstrap.com/" target=
"_blank">
378 http://getbootstrap.com/
387 <div class=
"feedback-container">
388 <div class=
"feedback">Loading...
</div>
391 <script type=
"text/template" id=
"address-row-template">
393 <td class=
"index"><span></span></td>
394 <td class=
"address"><span></span></td>
395 <td class=
"privkey"><span></span></td>
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});
404 * Bootstrap v3.2.0 (http://getbootstrap.com)
405 * Copyright 2011-2014 Twitter, Inc.
406 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
408 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void
0!==a.style[c])return{end:b[c]};return!
1}a.fn.emulateTransitionEnd=function(b){var c=!
1,d=this;a(this).one("bsTransitionEnd",function(){c=!
0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void
0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[
data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.
VERSION="
3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(
150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),
f="object"==typeof b&
&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!
1};c.
VERSION="
3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var
c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!
0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!
1,d.removeClass(c).removeAttr(c))},this),
0)},c.prototype.toggle=function(){var a=!
0,b=this.$element.closest('[
data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!
1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),
g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.
VERSION="
3.2.0",c.DEFAULTS={interval:
5e3,pause:"hover",wrap:!
0},c.prototype.keydown=function(a){switch(a.which){case
37:this.prev();break;case
39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!
1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b
>this.$items.length-
1||
0>b?void
0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b
>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!
0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!
0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void
0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void
0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,
g="next"==b?"left":"right",
h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!
1;var j=e[
0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!
0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[
0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!
1,setTimeout(function(){i.$element.trigger(m)},
0)}).emulateTransitionEnd(
1e3*d.css("transition-duration").slice(
0,-
1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!
1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!
1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[
data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.
VERSION="
3.2.0",c.DEFAULTS={toggle:!
0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("
> .panel
> .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](
0),this.transitioning=
1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=
0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(
350)[f](this.$element[
0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[
0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=
1;var d=function(){this.transitioning=
0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](
0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(
350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[
data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[
data-toggle="collapse"][
data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&
3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var
e=".dropdown-backdrop",f='[
data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.
VERSION="
3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
<div class=
"dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!
1}},g.prototype.keydown=function(b){if(/(
38|
40|
27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&
27==b.keyCode)return
27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var
h=" li:not(.divider):visible a",i=e.find('[
role="menu"]'+h+', [
role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));
38==b.keyCode&&j
>0&&j--,
40==b.keyCode&&j
<i.length-
1&&j++,~j||(j=
0),i.eq(j).trigger(
"focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(
"click.bs.dropdown.data-api",b).on(
"click.bs.dropdown.data-api",
".dropdown form",function(a){a.stopPropagation()}).on(
"click.bs.dropdown.data-api",f,g.prototype.toggle).on(
"keydown.bs.dropdown.data-api",f+', [
role=
"menu"], [
role=
"listbox"]',g.prototype.keydown)}(jQuery),+function(a){
"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data(
"bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),
"object"==typeof b&&b);f||e.data(
"bs.modal",f=new c(this,g)),
"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=
0,this.options.remote&&this.$element.find(
".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger(
"loaded.bs.modal")},this))};c.
VERSION=
"3.2.0",c.DEFAULTS={backdrop:!
0,keyboard:!
0,show:!
0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event(
"show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!
0,this.checkScrollbar(),this.$body.addClass(
"modal-open"),this.setScrollbar(),this.escape(),this.$element.on(
"click.dismiss.bs.modal",'[
data-dismiss=
"modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass(
"fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(
0),d&&c.$element[
0].offsetWidth,c.$element.addClass(
"in").attr(
"aria-hidden",!
1),c.enforceFocus();var e=a.Event(
"shown.bs.modal",{relatedTarget:b});d?c.$element.find(
".modal-dialog").one(
"bsTransitionEnd",function(){c.$element.trigger(
"focus").trigger(e)}).emulateTransitionEnd(
300):c.$element.trigger(
"focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(
"hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!
1,this.$body.removeClass(
"modal-open"),this.resetScrollbar(),this.escape(),a(document).off(
"focusin.bs.modal"),this.$element.removeClass(
"in").attr(
"aria-hidden",!
0).off(
"click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass(
"fade")?this.$element.one(
"bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(
300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(
"focusin.bs.modal").on(
"focusin.bs.modal",a.proxy(function(a){this.$element[
0]===a.target||this.$element.has(a.target).length||this.$element.trigger(
"focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(
"keyup.dismiss.bs.modal",a.proxy(function(a){
27==a.which&&this.hide()},this)):this.isShown||this.$element.off(
"keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger(
"hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass(
"fade")?
"fade":
"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&
&d;if(this.$backdrop=a('
<div class=
"modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[
0].focus.call(this.$element[
0]):this.hide.call(this))},this)),e&&this.$backdrop[
0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(
150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(
150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth
>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||
0,
10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.
className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[
0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[
data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),
f="object"==typeof b&
&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.
VERSION="
3.2.0",c.DEFAULTS={animation:!
0,placement:"top",selector:!
1,template:'
<div class=
"tooltip" role=
"tooltip"><div class=
"tooltip-arrow"></div><div class=
"tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:
0,html:!
1,container:!
1,viewport:{selector:"body",padding:
0}},c.prototype.init=function(b,c,d){this.enabled=!
0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var
h="hover"==g?"mouseenter":"focusin",
i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.
hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.
hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[
0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var
g="function"==typeof this.options.placement?this.options.placement.call(this,e[
0],this.$element[
0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:
0,left:
0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[
0].offsetWidth,l=e[
0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);
g="bottom"==g&&j.top+j.height+l-o.scroll
>o.height?"top":"top"==g&&j.top-o.scroll-l
<0?
"bottom":
"right"==g&&j.right+k
>o.width?"left":"left"==g&&j.left-k
<o.left?
"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger(
"shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass(
"fade")?e.one(
"bsTransitionEnd",q).emulateTransitionEnd(
150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[
0].offsetWidth,f=d[
0].offsetHeight,g=parseInt(d.css(
"margin-top"),
10),h=parseInt(d.css(
"margin-left"),
10);isNaN(g)&&(g=
0),isNaN(h)&&(h=
0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[
0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),
0),d.addClass(
"in");var i=d[
0].offsetWidth,j=d[
0].offsetHeight;
"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?
2*k.left-e+i:
2*k.top-f+j,m=k.left?
"left":
"top",n=k.left?
"offsetWidth":
"offsetHeight";d.offset(b),this.replaceArrow(l,d[
0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?
50*(
1-a/b)+
"%":
"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(
".tooltip-inner")[this.options.html?
"html":
"text"](b),a.removeClass(
"fade in top bottom left right")},c.prototype.hide=function(){function b(){
"in"!=c.hoverState&&d.detach(),c.$element.trigger(
"hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event(
"hide.bs."+this.type);return this.$element.removeAttr(
"aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void
0:(d.removeClass(
"in"),a.support.transition&&this.$tip.hasClass(
"fade")?d.one(
"bsTransitionEnd",b).emulateTransitionEnd(
150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(
"title")||
"string"!=typeof a.attr(
"data-original-title"))&&a.attr(
"data-original-title",a.attr(
"title")||
"").attr(
"title",
"")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[
0],
d=
"BODY"==c.tagName;return a.extend({},
"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:
0,left:
0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return
"bottom"==a?{top:b.top+b.height,left:b.left+b.width/
2-c/
2}:
"top"==a?{top:b.top-d,left:b.left+b.width/
2-c/
2}:
"left"==a?{top:b.top+b.height/
2-d/
2,left:b.left-c}:{top:b.top+b.height/
2-d/
2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:
0,left:
0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||
0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h
<g.top?e.top=g.top-h:i
>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j
<g.left?e.left=g.left-j:k
>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[
0]):c.title)},c.prototype.getUID=function(a){do a+=~~(
1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[
0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!
0},c.prototype.disable=function(){this.enabled=!
1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),
f="object"==typeof b&
&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.
VERSION="
3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'
<div class=
"popover" role=
"tooltip"><div class=
"arrow"></div><h3 class=
"popover-title"></h3><div class=
"popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[
0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li
> a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=
0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),
f="object"==typeof c&
&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.
VERSION="
3.2.0",b.DEFAULTS={offset:
10},b.prototype.getScrollHeight=function(){return this.$scrollElement[
0].scrollHeight||Math.max(this.$body[
0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var
b="offset",c=
0;a.isWindow(this.$scrollElement[
0])||(
b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[
0]-b[
0]}).each(function(){d.offsets.push(this[
0]),d.targets.push(this[
1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b
>=d)return g!=(a=f[f.length-
1])&&this.activate(a);if(g&&b<=e[
0])return g!=(a=f[
0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b
>=e[a]&&(!e[a+
1]||b<=e[a+
1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[
data-target="'+b+'"],'+this.selector+'[
href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[
data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.
VERSION="
3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[
0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("
> .dropdown-menu
> .active").removeClass("active"),b.addClass("active"),g?(b[
0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("
> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(
150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[
data-toggle="tab"], [
data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),
f="object"==typeof b&
&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.
VERSION="
3.2.0",c.
RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:
0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),
1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!
1:null!=h&&e.top+this.$element.height()
>=b-h?"bottom":null!=g&&g
>=d?"top":!
1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var
j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.
unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[
data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
</script>
409 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&
&require;if(!u&&a)return a(o,!
0);if(i)return i(o,!
0);var f=new Error("Cannot find module '"+o+"'");throw f.
code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][
0].call(l.exports,function(e){var n=t[o][
1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&
&require;for(var o=
0;o
<r.length;o++)s(r[o]);return s})({
1:[function(require,module,exports){
410 // (public) Constructor
411 function BigInteger(a, b, c) {
412 if (!(this instanceof BigInteger))
413 return new BigInteger(a, b, c)
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)
422 var proto = BigInteger.prototype
424 // duck-typed isBigInteger
425 proto.__bigi = require('../package.json').version
426 BigInteger.isBigInteger = function (obj, check_ver) {
427 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
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.
438 // am1: use a single mult and divide to get the high bits,
439 // max digit bits should be
26 because
440 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
441 function am1(i, x, w, j, c, n) {
443 var v = x * this[i++] + w[j] + c
444 c = Math.floor(v /
0x4000000)
445 w[j++] = v &
0x3ffffff
449 // am2 avoids a big mult-and-extract completely.
450 // Max digit bits should be <=
30 because we do bitwise ops
451 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
452 function am2(i, x, w, j, c, n) {
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
465 // Alternately, set max digit bits to
28 since some
466 // browsers slow down when dealing with
32-bit numbers.
467 function am3(i, x, w, j, c, n) {
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
482 BigInteger.prototype.am = am1
485 BigInteger.prototype.DB = dbits
486 BigInteger.prototype.DM = ((
1 << dbits) -
1)
487 var DV = BigInteger.prototype.DV = (
1 << dbits)
490 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
491 BigInteger.prototype.F1 = BI_FP - dbits
492 BigInteger.prototype.F2 =
2 * dbits - BI_FP
495 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
496 var BI_RC = new Array()
498 rr =
"0".charCodeAt(
0)
499 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
500 rr =
"a".charCodeAt(
0)
501 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
502 rr =
"A".charCodeAt(
0)
503 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
505 function int2char(n) {
506 return BI_RM.charAt(n)
509 function intAt(s, i) {
510 var c = BI_RC[s.charCodeAt(i)]
511 return (c == null) ? -
1 : c
514 // (protected) copy this to r
515 function bnpCopyTo(r) {
516 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
521 // (protected) set from integer value x, -DV <= x < DV
522 function bnpFromInt(x) {
524 this.s = (x <
0) ? -
1 :
0
525 if (x
> 0) this[
0] = x
526 else if (x < -
1) this[
0] = x + DV
530 // return bigint initialized to value
532 var r = new BigInteger()
537 // (protected) set from string and radix
538 function bnpFromString(s, b) {
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
558 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
560 if (s.charAt(i) == "-") mi = true
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))
570 self[self.t -
1] |= x << sh
572 if (sh
>= self.DB) sh -= self.DB
574 if (k ==
8 && (s[
0] &
0x80) !=
0) {
576 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
579 if (mi) BigInteger.ZERO.subTo(self, self)
582 // (protected) clamp off excess high words
583 function bnpClamp() {
584 var c = this.s & this.DM
585 while (this.t
> 0 && this[this.t -
1] == c)--this.t
588 // (public) return string representation in given radix
589 function bnToString(b) {
591 if (self.s <
0) return
"-" + self.negate()
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,
604 var p = self.DB - (i * self.DB) % k
606 if (p < self.DB && (d = self[i]
>> p)
> 0) {
612 d = (self[i] & ((
1 << p) -
1)) << (k - p)
613 d |= self[--i]
>> (p += self.DB - k)
615 d = (self[i]
>> (p -= k)) & km
622 if (m) r += int2char(d)
629 function bnNegate() {
630 var r = new BigInteger()
631 BigInteger.ZERO.subTo(this, r)
637 return (this.s <
0) ? this.negate() : this
640 // (public) return + if this
> a, - if this < a,
0 if equal
641 function bnCompareTo(a) {
646 if (r !=
0) return (this.s <
0) ? -r : r
648 if ((r = this[i] - a[i]) !=
0) return r
652 // returns bit length of the integer x
656 if ((t = x
>>> 16) !=
0) {
660 if ((t = x
>> 8) !=
0) {
664 if ((t = x
>> 4) !=
0) {
668 if ((t = x
>> 2) !=
0) {
672 if ((t = x
>> 1) !=
0) {
679 // (public) return the number of bits in
"this"
680 function bnBitLength() {
681 if (this.t <=
0) return
0
682 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
685 // (public) return the number of bytes in
"this"
686 function bnByteLength() {
687 return this.bitLength()
>> 3
690 // (protected) r = this << n*DB
691 function bnpDLShiftTo(n, r) {
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
699 // (protected) r = this
>> n*DB
700 function bnpDRShiftTo(n, r) {
701 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
702 r.t = Math.max(this.t - n,
0)
706 // (protected) r = this << n
707 function bnpLShiftTo(n, r) {
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,
715 for (i = self.t -
1; i
>=
0; --i) {
716 r[i + ds +
1] = (self[i]
>> cbs) | c
717 c = (self[i] & bm) << bs
719 for (i = ds -
1; i
>=
0; --i) r[i] =
0
721 r.t = self.t + ds +
1
726 // (protected) r = this
>> n
727 function bnpRShiftTo(n, r) {
730 var ds = Math.floor(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
743 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
748 // (protected) r = this - a
749 function bnpSubTo(a, r) {
753 m = Math.min(a.t, self.t)
776 r.s = (c <
0) ? -
1 :
0
777 if (c < -
1) r[i++] = self.DV + c
778 else if (c
> 0) r[i++] = c
783 // (protected) r = this * a, r != this,a (HAC
14.12)
784 //
"this" should be the larger one if appropriate.
785 function bnpMultiplyTo(a, r) {
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)
794 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
797 // (protected) r = this^
2, r != this (HAC
14.16)
798 function bnpSquareTo(r) {
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) {
809 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
814 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
815 // r != q, this != m. q or r may be null.
816 function bnpDivRemTo(m, q, r) {
819 if (pm.t <=
0) return
822 if (q != null) q.fromInt(
0)
823 if (r != null) self.copyTo(r)
826 if (r == null) r = new BigInteger()
827 var y = new BigInteger(),
830 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
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,
847 t = (q == null) ? new BigInteger() : q
849 if (r.compareTo(t)
>=
0) {
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
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
862 while (r[i] < --qd) r.subTo(t, r)
867 if (ts != ms) BigInteger.ZERO.subTo(q, q)
871 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
872 if (ts <
0) BigInteger.ZERO.subTo(r, r)
875 // (public) this mod a
877 var r = new BigInteger()
879 .divRemTo(a, null, r)
880 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
884 // Modular reduction using
"classic" algorithm
885 function Classic(m) {
889 function cConvert(x) {
890 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
894 function cRevert(x) {
898 function cReduce(x) {
899 x.divRemTo(this.m, null, x)
902 function cMulTo(x, y, r) {
907 function cSqrTo(x, r) {
912 Classic.prototype.convert = cConvert
913 Classic.prototype.revert = cRevert
914 Classic.prototype.reduce = cReduce
915 Classic.prototype.mulTo = cMulTo
916 Classic.prototype.sqrTo = cSqrTo
918 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
922 // xy(
2-xy) = (
1+km)(
1-km)
923 // x[y(
2-xy)] =
1-k^
2m^
2
924 // x[y(
2-xy)] ==
1 (mod m^
2)
925 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
926 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
927 // JS multiply "overflows" differently from C/C++, so care is needed here.
928 function bnpInvDigit() {
929 if (this.t <
1) return
0
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
943 // Montgomery reduction
944 function Montgomery(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
954 function montConvert(x) {
955 var r = new BigInteger()
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)
964 function montRevert(x) {
965 var r = new BigInteger()
971 // x = x/R mod m (HAC
14.32)
972 function montReduce(x) {
973 while (x.t <= this.mt2) // pad x so am has enough room later
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
981 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
983 while (x[j]
>= x.DV) {
989 x.drShiftTo(this.m.t, x)
990 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
993 // r = "x^
2/R mod m"; x != r
994 function montSqrTo(x, r) {
999 // r = "xy/R mod m"; x,y != r
1000 function montMulTo(x, y, r) {
1005 Montgomery.prototype.convert = montConvert
1006 Montgomery.prototype.revert = montRevert
1007 Montgomery.prototype.reduce = montReduce
1008 Montgomery.prototype.mulTo = montMulTo
1009 Montgomery.prototype.sqrTo = montSqrTo
1011 // (protected) true iff this is even
1012 function bnpIsEven() {
1013 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1016 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1017 function bnpExp(e, z) {
1018 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1019 var r = new BigInteger(),
1020 r2 = new BigInteger(),
1021 g = z.convert(this),
1026 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1036 // (public) this^e % m,
0 <= e <
2^
32
1037 function bnModPowInt(e, m) {
1039 if (e <
256 || m.isEven()) z = new Classic(m)
1040 else z = new Montgomery(m)
1041 return this.exp(e, z)
1045 proto.copyTo = bnpCopyTo
1046 proto.fromInt = bnpFromInt
1047 proto.fromString = bnpFromString
1048 proto.clamp = bnpClamp
1049 proto.dlShiftTo = bnpDLShiftTo
1050 proto.drShiftTo = bnpDRShiftTo
1051 proto.lShiftTo = bnpLShiftTo
1052 proto.rShiftTo = bnpRShiftTo
1053 proto.subTo = bnpSubTo
1054 proto.multiplyTo = bnpMultiplyTo
1055 proto.squareTo = bnpSquareTo
1056 proto.divRemTo = bnpDivRemTo
1057 proto.invDigit = bnpInvDigit
1058 proto.isEven = bnpIsEven
1062 proto.toString = bnToString
1063 proto.negate = bnNegate
1065 proto.compareTo = bnCompareTo
1066 proto.bitLength = bnBitLength
1067 proto.byteLength = bnByteLength
1069 proto.modPowInt = bnModPowInt
1072 function bnClone() {
1073 var r = new BigInteger()
1078 // (public) return value as integer
1079 function bnIntValue() {
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]
1089 // (public) return value as byte
1090 function bnByteValue() {
1091 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1094 // (public) return value as short (assumes DB
>=
16)
1095 function bnShortValue() {
1096 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1099 // (protected) return x s.t. r^x < DV
1100 function bnpChunkSize(r) {
1101 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1104 // (public)
0 if this ==
0,
1 if this
> 0
1105 function bnSigNum() {
1106 if (this.s <
0) return -
1
1107 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1111 // (protected) convert to radix string
1112 function bnpToRadix(b) {
1113 if (b == null) b =
10
1114 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1115 var cs = this.chunkSize(b)
1116 var a = Math.pow(b, cs)
1118 y = new BigInteger(),
1119 z = new BigInteger(),
1121 this.divRemTo(d, y, z)
1122 while (y.signum()
> 0) {
1123 r = (a + z.intValue())
1132 // (protected) convert from radix string
1133 function bnpFromRadix(s, b) {
1136 if (b == null) b =
10
1137 var cs = self.chunkSize(b)
1138 var d = Math.pow(b, cs),
1142 for (var i =
0; i < s.length; ++i) {
1145 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1151 self.dAddOffset(w,
0)
1157 self.dMultiply(Math.pow(b, j))
1158 self.dAddOffset(w,
0)
1160 if (mi) BigInteger.ZERO.subTo(self, self)
1163 // (protected) alternate constructor
1164 function bnpFromNumber(a, b, c) {
1166 if (
"number" == typeof b) {
1167 // new BigInteger(int,int,RNG)
1168 if (a <
2) self.fromInt(
1)
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)
1180 // new BigInteger(int,RNG)
1181 var x = new Array(),
1183 x.length = (a
>> 3) +
1
1185 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1187 self.fromString(x,
256)
1191 // (public) convert to bigendian byte array
1192 function bnToByteArray() {
1197 var p = self.DB - (i * self.DB) %
8,
1200 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1201 r[k++] = d | (self.s << (self.DB - p))
1204 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1205 d |= self[--i]
>> (p += self.DB -
8)
1207 d = (self[i]
>> (p -=
8)) &
0xff
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
1221 function bnEquals(a) {
1222 return (this.compareTo(a) ==
0)
1226 return (this.compareTo(a) <
0) ? this : a
1230 return (this.compareTo(a)
> 0) ? this : a
1233 // (protected) r = this op a (bitwise)
1234 function bnpBitwiseTo(a, op, r) {
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])
1240 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1243 f = self.s & self.DM
1244 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1247 r.s = op(self.s, a.s)
1251 // (public) this & a
1252 function op_and(x, y) {
1257 var r = new BigInteger()
1258 this.bitwiseTo(a, op_and, r)
1262 // (public) this | a
1263 function op_or(x, y) {
1268 var r = new BigInteger()
1269 this.bitwiseTo(a, op_or, r)
1273 // (public) this ^ a
1274 function op_xor(x, y) {
1279 var r = new BigInteger()
1280 this.bitwiseTo(a, op_xor, r)
1284 // (public) this & ~a
1285 function op_andnot(x, y) {
1289 function bnAndNot(a) {
1290 var r = new BigInteger()
1291 this.bitwiseTo(a, op_andnot, r)
1297 var r = new BigInteger()
1298 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1304 // (public) this << n
1305 function bnShiftLeft(n) {
1306 var r = new BigInteger()
1307 if (n <
0) this.rShiftTo(-n, r)
1308 else this.lShiftTo(n, r)
1312 // (public) this
>> n
1313 function bnShiftRight(n) {
1314 var r = new BigInteger()
1315 if (n <
0) this.lShiftTo(-n, r)
1316 else this.rShiftTo(n, r)
1320 // return index of lowest
1-bit in x, x <
2^
31
1322 if (x ==
0) return -
1
1324 if ((x &
0xffff) ==
0) {
1328 if ((x &
0xff) ==
0) {
1332 if ((x &
0xf) ==
0) {
1340 if ((x &
1) ==
0)++r
1344 // (public) returns index of lowest
1-bit (or -
1 if none)
1345 function bnGetLowestSetBit() {
1346 for (var i =
0; i < this.t; ++i)
1347 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1348 if (this.s <
0) return this.t * this.DB
1352 // return number of
1 bits in x
1362 // (public) return number of set bits
1363 function bnBitCount() {
1365 x = this.s & this.DM
1366 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1370 // (public) true iff nth bit is set
1371 function bnTestBit(n) {
1372 var j = Math.floor(n / this.DB)
1373 if (j
>= this.t) return (this.s !=
0)
1374 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1377 // (protected) this op (
1<
<n)
1378 function bnpChangeBit(n, op) {
1379 var r = BigInteger.ONE.shiftLeft(n)
1380 this.bitwiseTo(r, op, r)
1384 // (public) this | (
1<
<n)
1385 function bnSetBit(n) {
1386 return this.changeBit(n, op_or)
1389 // (public) this & ~(
1<
<n)
1390 function bnClearBit(n) {
1391 return this.changeBit(n, op_andnot)
1394 // (public) this ^ (
1<
<n)
1395 function bnFlipBit(n) {
1396 return this.changeBit(n, op_xor)
1399 // (protected) r = this + a
1400 function bnpAddTo(a, r) {
1405 m = Math.min(a.t, self.t)
1408 r[i++] = c & self.DM
1413 while (i < self.t) {
1415 r[i++] = c & self.DM
1423 r[i++] = c & self.DM
1428 r.s = (c <
0) ? -
1 :
0
1429 if (c
> 0) r[i++] = c
1430 else if (c < -
1) r[i++] = self.DV + c
1435 // (public) this + a
1437 var r = new BigInteger()
1442 // (public) this - a
1443 function bnSubtract(a) {
1444 var r = new BigInteger()
1449 // (public) this * a
1450 function bnMultiply(a) {
1451 var r = new BigInteger()
1452 this.multiplyTo(a, r)
1457 function bnSquare() {
1458 var r = new BigInteger()
1463 // (public) this / a
1464 function bnDivide(a) {
1465 var r = new BigInteger()
1466 this.divRemTo(a, r, null)
1470 // (public) this % a
1471 function bnRemainder(a) {
1472 var r = new BigInteger()
1473 this.divRemTo(a, null, r)
1477 // (public) [this/a,this%a]
1478 function bnDivideAndRemainder(a) {
1479 var q = new BigInteger(),
1480 r = new BigInteger()
1481 this.divRemTo(a, q, r)
1482 return new Array(q, r)
1485 // (protected) this *= n, this
>=
0,
1 < n < DV
1486 function bnpDMultiply(n) {
1487 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1492 // (protected) this += n << w words, this
>=
0
1493 function bnpDAddOffset(n, w) {
1495 while (this.t <= w) this[this.t++] =
0
1497 while (this[w]
>= this.DV) {
1499 if (++w
>= this.t) this[this.t++] =
0
1505 function NullExp() {}
1511 function nMulTo(x, y, r) {
1515 function nSqrTo(x, r) {
1519 NullExp.prototype.convert = nNop
1520 NullExp.prototype.revert = nNop
1521 NullExp.prototype.mulTo = nMulTo
1522 NullExp.prototype.sqrTo = nSqrTo
1526 return this.exp(e, new NullExp())
1529 // (protected) r = lower n words of "this * a", a.t <= n
1530 // "this" should be the larger one if appropriate.
1531 function bnpMultiplyLowerTo(a, n, r) {
1532 var i = Math.min(this.t + a.t, n)
1533 r.s =
0; // assumes a,this
>=
0
1535 while (i
> 0) r[--i] =
0
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)
1542 // (protected) r =
"this * a" without lower n words, n
> 0
1543 //
"this" should be the larger one if appropriate.
1544 function bnpMultiplyUpperTo(a, n, r) {
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)
1555 // Barrett modular reduction
1556 function Barrett(m) {
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)
1565 function barrettConvert(x) {
1566 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1567 else if (x.compareTo(this.m) <
0) return x
1569 var r = new BigInteger()
1576 function barrettRevert(x) {
1580 // x = x mod m (HAC
14.42)
1581 function barrettReduce(x) {
1583 x.drShiftTo(self.m.t -
1, self.r2)
1584 if (x.t
> self.m.t +
1) {
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)
1592 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1595 // r = x^
2 mod m; x != r
1596 function barrettSqrTo(x, r) {
1601 // r = x*y mod m; x,y != r
1602 function barrettMulTo(x, y, r) {
1607 Barrett.prototype.convert = barrettConvert
1608 Barrett.prototype.revert = barrettRevert
1609 Barrett.prototype.reduce = barrettReduce
1610 Barrett.prototype.mulTo = barrettMulTo
1611 Barrett.prototype.sqrTo = barrettSqrTo
1613 // (public) this^e % m (HAC
14.85)
1614 function bnModPow(e, m) {
1615 var i = e.bitLength(),
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
1626 else if (m.isEven())
1629 z = new Montgomery(m)
1632 var g = new Array(),
1636 g[
1] = z.convert(this)
1638 var g2 = new BigInteger()
1641 g[n] = new BigInteger()
1642 z.mulTo(g2, g[n -
2], g[n])
1649 r2 = new BigInteger(),
1653 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1655 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1656 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1660 while ((w &
1) ==
0) {
1668 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1677 if (n
> 0) z.sqrTo(r, r2)
1683 z.mulTo(r2, g[w], r)
1686 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1700 // (public) gcd(this,a) (HAC
14.54)
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) {
1709 var i = x.getLowestSetBit(),
1710 g = y.getLowestSetBit()
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) {
1728 if (g
> 0) y.lShiftTo(g, y)
1732 // (protected) this % n, n <
2^
26
1733 function bnpModInt(n) {
1734 if (n <=
0) return
0
1735 var d = this.DV % n,
1736 r = (this.s <
0) ? n -
1 :
0
1738 if (d ==
0) r = this[
0] % n
1740 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1744 // (public)
1/this % m (HAC
14.61)
1745 function bnModInverse(m) {
1747 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1754 while (u.signum() !=
0) {
1755 while (u.isEven()) {
1758 if (!a.isEven() || !b.isEven()) {
1763 } else if (!b.isEven()) b.subTo(m, b)
1766 while (v.isEven()) {
1769 if (!c.isEven() || !d.isEven()) {
1774 } else if (!d.isEven()) d.subTo(m, d)
1777 if (u.compareTo(v)
>=
0) {
1779 if (ac) a.subTo(c, a)
1783 if (ac) c.subTo(a, c)
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)
1791 if (d.signum() <
0) return d.add(m)
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
1809 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
1811 // (public) test primality with certainty
>=
1-
.5^t
1812 function bnIsProbablePrime(t) {
1813 var i, x = this.abs()
1814 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
1815 for (i =
0; i < lowprimes.length; ++i)
1816 if (x[
0] == lowprimes[i]) return true
1819 if (x.isEven()) return false
1821 while (i < lowprimes.length) {
1822 var m = lowprimes[i],
1824 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1826 while (i < j) if (m % lowprimes[i++] ==
0) return false
1828 return x.millerRabin(t)
1831 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
1832 function bnpMillerRabin(t) {
1833 var n1 = this.subtract(BigInteger.ONE)
1834 var k = n1.getLowestSetBit()
1835 if (k <=
0) return false
1836 var r = n1.shiftRight(k)
1838 if (t
> lowprimes.length) t = lowprimes.length
1839 var a = new BigInteger(null)
1841 for (var i =
0; i < t; ++i) {
1843 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1844 if (bases.indexOf(j) == -
1) break
1848 var y = a.modPow(r, this)
1849 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
1851 while (j++ < k && y.compareTo(n1) !=
0) {
1852 y = y.modPowInt(
2, this)
1853 if (y.compareTo(BigInteger.ONE) ==
0) return false
1855 if (y.compareTo(n1) !=
0) return false
1862 proto.chunkSize = bnpChunkSize
1863 proto.toRadix = bnpToRadix
1864 proto.fromRadix = bnpFromRadix
1865 proto.fromNumber = bnpFromNumber
1866 proto.bitwiseTo = bnpBitwiseTo
1867 proto.changeBit = bnpChangeBit
1868 proto.addTo = bnpAddTo
1869 proto.dMultiply = bnpDMultiply
1870 proto.dAddOffset = bnpDAddOffset
1871 proto.multiplyLowerTo = bnpMultiplyLowerTo
1872 proto.multiplyUpperTo = bnpMultiplyUpperTo
1873 proto.modInt = bnpModInt
1874 proto.millerRabin = bnpMillerRabin
1877 proto.clone = bnClone
1878 proto.intValue = bnIntValue
1879 proto.byteValue = bnByteValue
1880 proto.shortValue = bnShortValue
1881 proto.signum = bnSigNum
1882 proto.toByteArray = bnToByteArray
1883 proto.equals = bnEquals
1889 proto.andNot = bnAndNot
1891 proto.shiftLeft = bnShiftLeft
1892 proto.shiftRight = bnShiftRight
1893 proto.getLowestSetBit = bnGetLowestSetBit
1894 proto.bitCount = bnBitCount
1895 proto.testBit = bnTestBit
1896 proto.setBit = bnSetBit
1897 proto.clearBit = bnClearBit
1898 proto.flipBit = bnFlipBit
1900 proto.subtract = bnSubtract
1901 proto.multiply = bnMultiply
1902 proto.divide = bnDivide
1903 proto.remainder = bnRemainder
1904 proto.divideAndRemainder = bnDivideAndRemainder
1905 proto.modPow = bnModPow
1906 proto.modInverse = bnModInverse
1909 proto.isProbablePrime = bnIsProbablePrime
1911 // JSBN-specific extension
1912 proto.square = bnSquare
1915 BigInteger.ZERO = nbv(
0)
1916 BigInteger.ONE = nbv(
1)
1917 BigInteger.valueOf = nbv
1919 module.exports = BigInteger
1921 },{"../package.json":
4}],
2:[function(require,module,exports){
1923 // FIXME: Kind of a weird way to throw exceptions, consider removing
1924 var assert = require('assert')
1925 var BigInteger = require('./bigi')
1928 * Turns a byte array into a big integer.
1930 * This function will interpret a byte array as a big integer in big
1933 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1934 // BigInteger expects a DER integer conformant byte array
1935 if (byteArray[
0] &
0x80) {
1936 return new BigInteger([
0].concat(byteArray))
1939 return new BigInteger(byteArray)
1943 * Returns a byte array representation of the big integer.
1945 * This returns the absolute of the contained value in big endian
1946 * form. A value of zero results in an empty array.
1948 BigInteger.prototype.toByteArrayUnsigned = function() {
1949 var byteArray = this.toByteArray()
1950 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
1953 BigInteger.fromDERInteger = function(byteArray) {
1954 return new BigInteger(byteArray)
1958 * Converts BigInteger to a DER integer representation.
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.
1978 * -
62300 =
> 0xff0ca4
1980 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1982 BigInteger.fromBuffer = function(buffer) {
1983 // BigInteger expects a DER integer conformant byte array
1984 if (buffer[
0] &
0x80) {
1985 var byteArray = Array.prototype.slice.call(buffer)
1987 return new BigInteger([
0].concat(byteArray))
1990 return new BigInteger(buffer)
1993 BigInteger.fromHex = function(hex) {
1994 if (hex === '') return BigInteger.ZERO
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)
2001 BigInteger.prototype.toBuffer = function(size) {
2002 var byteArray = this.toByteArrayUnsigned()
2005 var padding = size - byteArray.length
2006 while (zeros.length < padding) zeros.push(
0)
2008 return new Buffer(zeros.concat(byteArray))
2011 BigInteger.prototype.toHex = function(size) {
2012 return this.toBuffer(size).toString('hex')
2015 }).call(this,require(
"buffer").Buffer)
2016 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2017 var BigInteger = require('./bigi')
2020 require('./convert')
2022 module.exports = BigInteger
2023 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2027 "description":
"Big integers.",
2045 "devDependencies": {
2048 "coveralls":
"^2.10.0",
2049 "istanbul":
"^0.2.11"
2052 "url":
"https://github.com/cryptocoinjs/bigi",
2055 "main":
"./lib/index.js",
2057 "test":
"_mocha -- test/*.js",
2058 "jshint":
"jshint --config jshint.json lib/*.js ; true",
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"
2065 "files":
"test/*.js",
2071 "safari/6.0..latest",
2072 "iphone/6.0..latest",
2073 "android-browser/4.2..latest"
2077 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2079 "homepage":
"https://github.com/cryptocoinjs/bigi",
2080 "_id":
"bigi@1.4.0",
2082 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2083 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2085 "_from":
"bigi@^1.4.0",
2086 "_npmVersion":
"1.4.3",
2089 "email":
"jprichardson@gmail.com"
2094 "email":
"jprichardson@gmail.com"
2097 "name":
"midnightlightning",
2098 "email":
"boydb@midnightdesign.ws"
2101 "name":
"sidazhang",
2102 "email":
"sidazhang89@gmail.com"
2106 "email":
"npm@shesek.info"
2110 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2111 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2114 },{}],
5:[function(require,module,exports){
2115 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2117 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2119 // Originally from narwhal.js (http://narwhaljs.org)
2120 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
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:
2129 // The above copyright notice and this permission notice shall be included in
2130 // all copies or substantial portions of the Software.
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.
2139 // when used in node, this will actually load the util module we depend on
2140 // versus loading the builtin util module as happens otherwise
2141 // this is a bug in node module loading as far as I am concerned
2142 var util = require('util/');
2144 var pSlice = Array.prototype.slice;
2145 var hasOwn = Object.prototype.hasOwnProperty;
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.
2151 var assert = module.exports = ok;
2153 //
2. The AssertionError is defined in assert.
2154 // new assert.AssertionError({ message: message,
2156 // expected: expected })
2158 assert.AssertionError = function AssertionError(options) {
2159 this.name = 'AssertionError';
2160 this.actual = options.actual;
2161 this.expected = options.expected;
2162 this.operator = options.operator;
2163 if (options.message) {
2164 this.message = options.message;
2165 this.generatedMessage = false;
2167 this.message = getMessage(this);
2168 this.generatedMessage = true;
2170 var stackStartFunction = options.stackStartFunction || fail;
2172 if (Error.captureStackTrace) {
2173 Error.captureStackTrace(this, stackStartFunction);
2176 // non v8 browsers so we can have a stacktrace
2177 var err = new Error();
2179 var out = err.stack;
2181 // try to strip useless frames
2182 var fn_name = stackStartFunction.name;
2183 var idx = out.indexOf('\n' + fn_name);
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);
2196 // assert.AssertionError instanceof Error
2197 util.inherits(assert.AssertionError, Error);
2199 function replacer(key, value) {
2200 if (util.isUndefined(value)) {
2203 if (util.isNumber(value) && !isFinite(value)) {
2204 return value.toString();
2206 if (util.isFunction(value) || util.isRegExp(value)) {
2207 return value.toString();
2212 function truncate(s, n) {
2213 if (util.isString(s)) {
2214 return s.length < n ? s : s.slice(
0, n);
2220 function getMessage(self) {
2221 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2222 self.operator + ' ' +
2223 truncate(JSON.stringify(self.expected, replacer),
128);
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
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.
2237 function fail(actual, expected, message, operator, stackStartFunction) {
2238 throw new assert.AssertionError({
2243 stackStartFunction: stackStartFunction
2247 // EXTENSION! allows for well behaved errors defined elsewhere.
2250 //
4. Pure assertion tests whether a value is truthy, as determined
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);.
2257 function ok(value, message) {
2258 if (!value) fail(value, true, message, '==', assert.ok);
2262 //
5. The equality assertion tests shallow, coercive equality with
2264 // assert.equal(actual, expected, message_opt);
2266 assert.equal = function equal(actual, expected, message) {
2267 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2270 //
6. The non-equality assertion tests for whether two objects are not equal
2271 // with != assert.notEqual(actual, expected, message_opt);
2273 assert.notEqual = function notEqual(actual, expected, message) {
2274 if (actual == expected) {
2275 fail(actual, expected, message, '!=', assert.notEqual);
2279 //
7. The equivalence assertion tests a deep equality relation.
2280 // assert.deepEqual(actual, expected, message_opt);
2282 assert.deepEqual = function deepEqual(actual, expected, message) {
2283 if (!_deepEqual(actual, expected)) {
2284 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2288 function _deepEqual(actual, expected) {
2289 //
7.1. All identical values are equivalent, as determined by ===.
2290 if (actual === expected) {
2293 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2294 if (actual.length != expected.length) return false;
2296 for (var i =
0; i < actual.length; i++) {
2297 if (actual[i] !== expected[i]) return false;
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();
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;
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;
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.
2329 return objEquiv(actual, expected);
2333 function isArguments(object) {
2334 return Object.prototype.toString.call(object) == '[object Arguments]';
2337 function objEquiv(a, b) {
2338 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
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)) {
2346 var aIsArgs = isArguments(a),
2347 bIsArgs = isArguments(b);
2348 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2353 return _deepEqual(a, b);
2355 var ka = objectKeys(a),
2358 // having the same number of owned properties (keys incorporates
2360 if (ka.length != kb.length)
2362 //the same set of keys (although not necessarily the same order),
2366 for (i = ka.length -
1; i
>=
0; i--) {
2370 //equivalent values for every corresponding key, and
2371 //~~~possibly expensive deep test
2372 for (i = ka.length -
1; i
>=
0; i--) {
2374 if (!_deepEqual(a[key], b[key])) return false;
2379 //
8. The non-equivalence assertion tests for any deep inequality.
2380 // assert.notDeepEqual(actual, expected, message_opt);
2382 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2383 if (_deepEqual(actual, expected)) {
2384 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2388 //
9. The strict equality assertion tests strict equality, as determined by ===.
2389 // assert.strictEqual(actual, expected, message_opt);
2391 assert.strictEqual = function strictEqual(actual, expected, message) {
2392 if (actual !== expected) {
2393 fail(actual, expected, message, '===', assert.strictEqual);
2397 //
10. The strict non-equality assertion tests for strict inequality, as
2398 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2400 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2401 if (actual === expected) {
2402 fail(actual, expected, message, '!==', assert.notStrictEqual);
2406 function expectedException(actual, expected) {
2407 if (!actual || !expected) {
2411 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2412 return expected.test(actual);
2413 } else if (actual instanceof expected) {
2415 } else if (expected.call({}, actual) === true) {
2422 function _throws(shouldThrow, block, expected, message) {
2425 if (util.isString(expected)) {
2436 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2437 (message ? ' ' + message : '.');
2439 if (shouldThrow && !actual) {
2440 fail(actual, expected, 'Missing expected exception' + message);
2443 if (!shouldThrow && expectedException(actual, expected)) {
2444 fail(actual, expected, 'Got unwanted exception' + message);
2447 if ((shouldThrow && actual && expected &&
2448 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2453 //
11. Expected to throw an error:
2454 // assert.throws(block, Error_opt, message_opt);
2456 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2457 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2460 // EXTENSION! This is annoying to write outside this module.
2461 assert.doesNotThrow = function(block, /*optional*/message) {
2462 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2465 assert.ifError = function(err) { if (err) {throw err;}};
2467 var objectKeys = Object.keys || function (obj) {
2469 for (var key in obj) {
2470 if (hasOwn.call(obj, key)) keys.push(key);
2475 },{"util/":
29}],
6:[function(require,module,exports){
2477 },{}],
7:[function(require,module,exports){
2479 * The buffer module from node.js, for the browser.
2481 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2485 var base64 = require('base64-js')
2486 var ieee754 = require('ieee754')
2487 var isArray = require('is-array')
2489 exports.Buffer = Buffer
2490 exports.SlowBuffer = SlowBuffer
2491 exports.INSPECT_MAX_BYTES =
50
2492 Buffer.poolSize =
8192 // not used by this implementation
2497 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2498 * === true Use Uint8Array implementation (fastest)
2499 * === false Use Object implementation (most compatible, even IE6)
2501 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2502 * Opera
11.6+, iOS
4.2+.
2504 * Due to various browser bugs, sometimes the Object implementation will be used even
2505 * when the browser supports typed arrays.
2509 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2510 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2512 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2515 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2517 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2518 * incorrect length in some situations.
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.
2523 Buffer.TYPED_ARRAY_SUPPORT = (function () {
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`
2538 function kMaxLength () {
2539 return Buffer.TYPED_ARRAY_SUPPORT
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
2553 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2556 function Buffer (arg) {
2557 if (!(this instanceof Buffer)) {
2558 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2559 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2560 return new Buffer(arg)
2564 this.parent = undefined
2567 if (typeof arg === 'number') {
2568 return fromNumber(this, arg)
2571 // Slightly less common case.
2572 if (typeof arg === 'string') {
2573 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2577 return fromObject(this, arg)
2580 function fromNumber (that, length) {
2581 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2582 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2583 for (var i =
0; i < length; i++) {
2590 function fromString (that, string, encoding) {
2591 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2593 // Assumption: byteLength() return value is always < kMaxLength.
2594 var length = byteLength(string, encoding) |
0
2595 that = allocate(that, length)
2597 that.write(string, encoding)
2601 function fromObject (that, object) {
2602 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2604 if (isArray(object)) return fromArray(that, object)
2606 if (object == null) {
2607 throw new TypeError('must start with number, buffer, array or string')
2610 if (typeof ArrayBuffer !== 'undefined') {
2611 if (object.buffer instanceof ArrayBuffer) {
2612 return fromTypedArray(that, object)
2614 if (object instanceof ArrayBuffer) {
2615 return fromArrayBuffer(that, object)
2619 if (object.length) return fromArrayLike(that, object)
2621 return fromJsonObject(that, object)
2624 function fromBuffer (that, buffer) {
2625 var length = checked(buffer.length) |
0
2626 that = allocate(that, length)
2627 buffer.copy(that,
0,
0, length)
2631 function fromArray (that, array) {
2632 var length = checked(array.length) |
0
2633 that = allocate(that, length)
2634 for (var i =
0; i < length; i +=
1) {
2635 that[i] = array[i] &
255
2640 // Duplicate of fromArray() to keep fromArray() monomorphic.
2641 function fromTypedArray (that, array) {
2642 var length = checked(array.length) |
0
2643 that = allocate(that, length)
2644 // Truncating the elements is probably not what people expect from typed
2645 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2646 // of the old Buffer constructor.
2647 for (var i =
0; i < length; i +=
1) {
2648 that[i] = array[i] &
255
2653 function fromArrayBuffer (that, array) {
2654 if (Buffer.TYPED_ARRAY_SUPPORT) {
2655 // Return an augmented `Uint8Array` instance, for best performance
2657 that = Buffer._augment(new Uint8Array(array))
2659 // Fallback: Return an object instance of the Buffer class
2660 that = fromTypedArray(that, new Uint8Array(array))
2665 function fromArrayLike (that, array) {
2666 var length = checked(array.length) |
0
2667 that = allocate(that, length)
2668 for (var i =
0; i < length; i +=
1) {
2669 that[i] = array[i] &
255
2674 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2675 // Returns a zero-length buffer for inputs that don't conform to the spec.
2676 function fromJsonObject (that, object) {
2680 if (object.type === 'Buffer' && isArray(object.data)) {
2682 length = checked(array.length) |
0
2684 that = allocate(that, length)
2686 for (var i =
0; i < length; i +=
1) {
2687 that[i] = array[i] &
255
2692 function allocate (that, length) {
2693 if (Buffer.TYPED_ARRAY_SUPPORT) {
2694 // Return an augmented `Uint8Array` instance, for best performance
2695 that = Buffer._augment(new Uint8Array(length))
2697 // Fallback: Return an object instance of the Buffer class
2698 that.length = length
2699 that._isBuffer = true
2702 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2703 if (fromPool) that.parent = rootParent
2708 function checked (length) {
2709 // Note: cannot use `length < kMaxLength` here because that fails when
2710 // length is NaN (which is otherwise coerced to zero.)
2711 if (length
>= kMaxLength()) {
2712 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2713 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2718 function SlowBuffer (subject, encoding) {
2719 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2721 var buf = new Buffer(subject, encoding)
2726 Buffer.isBuffer = function isBuffer (b) {
2727 return !!(b != null && b._isBuffer)
2730 Buffer.compare = function compare (a, b) {
2731 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2732 throw new TypeError('Arguments must be Buffers')
2735 if (a === b) return
0
2741 var len = Math.min(x, y)
2743 if (a[i] !== b[i]) break
2753 if (x < y) return -
1
2758 Buffer.isEncoding = function isEncoding (encoding) {
2759 switch (String(encoding).toLowerCase()) {
2777 Buffer.concat = function concat (list, length) {
2778 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2780 if (list.length ===
0) {
2781 return new Buffer(
0)
2785 if (length === undefined) {
2787 for (i =
0; i < list.length; i++) {
2788 length += list[i].length
2792 var buf = new Buffer(length)
2794 for (i =
0; i < list.length; i++) {
2802 function byteLength (string, encoding) {
2803 if (typeof string !== 'string') string = '' + string
2805 var len = string.length
2806 if (len ===
0) return
0
2808 // Use a for loop to avoid recursion
2809 var loweredCase = false
2820 return utf8ToBytes(string).length
2829 return base64ToBytes(string).length
2831 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2832 encoding = ('' + encoding).toLowerCase()
2837 Buffer.byteLength = byteLength
2839 // pre-set for values that may exist in the future
2840 Buffer.prototype.length = undefined
2841 Buffer.prototype.parent = undefined
2843 function slowToString (encoding, start, end) {
2844 var loweredCase = false
2847 end = end === undefined || end === Infinity ? this.length : end |
0
2849 if (!encoding) encoding = 'utf8'
2850 if (start <
0) start =
0
2851 if (end
> this.length) end = this.length
2852 if (end <= start) return ''
2857 return hexSlice(this, start, end)
2861 return utf8Slice(this, start, end)
2864 return asciiSlice(this, start, end)
2867 return binarySlice(this, start, end)
2870 return base64Slice(this, start, end)
2876 return utf16leSlice(this, start, end)
2879 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2880 encoding = (encoding + '').toLowerCase()
2886 Buffer.prototype.toString = function toString () {
2887 var length = this.length |
0
2888 if (length ===
0) return ''
2889 if (arguments.length ===
0) return utf8Slice(this,
0, length)
2890 return slowToString.apply(this, arguments)
2893 Buffer.prototype.equals = function equals (b) {
2894 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2895 if (this === b) return true
2896 return Buffer.compare(this, b) ===
0
2899 Buffer.prototype.inspect = function inspect () {
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 += ' ... '
2906 return '
<Buffer ' + str + '
>'
2909 Buffer.prototype.compare = function compare (b) {
2910 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2911 if (this === b) return
0
2912 return Buffer.compare(this, b)
2915 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2916 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
2917 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
2920 if (this.length ===
0) return -
1
2921 if (byteOffset
>= this.length) return -
1
2923 // Negative offsets start from the end of the buffer
2924 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
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)
2930 if (Buffer.isBuffer(val)) {
2931 return arrayIndexOf(this, val, byteOffset)
2933 if (typeof val === 'number') {
2934 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2935 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2937 return arrayIndexOf(this, [ val ], byteOffset)
2940 function arrayIndexOf (arr, val, byteOffset) {
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
2953 throw new TypeError('val must be string, number or Buffer')
2956 // `get` is deprecated
2957 Buffer.prototype.get = function get (offset) {
2958 console.log('.get() is deprecated. Access using array indexes instead.')
2959 return this.readUInt8(offset)
2962 // `set` is deprecated
2963 Buffer.prototype.set = function set (v, offset) {
2964 console.log('.set() is deprecated. Access using array indexes instead.')
2965 return this.writeUInt8(v, offset)
2968 function hexWrite (buf, string, offset, length) {
2969 offset = Number(offset) ||
0
2970 var remaining = buf.length - offset
2974 length = Number(length)
2975 if (length
> remaining) {
2980 // must be an even number of digits
2981 var strLen = string.length
2982 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
2984 if (length
> strLen /
2) {
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
2995 function utf8Write (buf, string, offset, length) {
2996 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2999 function asciiWrite (buf, string, offset, length) {
3000 return blitBuffer(asciiToBytes(string), buf, offset, length)
3003 function binaryWrite (buf, string, offset, length) {
3004 return asciiWrite(buf, string, offset, length)
3007 function base64Write (buf, string, offset, length) {
3008 return blitBuffer(base64ToBytes(string), buf, offset, length)
3011 function ucs2Write (buf, string, offset, length) {
3012 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3015 Buffer.prototype.write = function write (string, offset, length, encoding) {
3016 // Buffer#write(string)
3017 if (offset === undefined) {
3019 length = this.length
3021 // Buffer#write(string, encoding)
3022 } else if (length === undefined && typeof offset === 'string') {
3024 length = this.length
3026 // Buffer#write(string, offset[, length][, encoding])
3027 } else if (isFinite(offset)) {
3029 if (isFinite(length)) {
3031 if (encoding === undefined) encoding = 'utf8'
3036 // legacy write(string, encoding, offset, length) - remove in v0.13
3044 var remaining = this.length - offset
3045 if (length === undefined || length
> remaining) length = remaining
3047 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3048 throw new RangeError('attempt to write outside buffer bounds')
3051 if (!encoding) encoding = 'utf8'
3053 var loweredCase = false
3057 return hexWrite(this, string, offset, length)
3061 return utf8Write(this, string, offset, length)
3064 return asciiWrite(this, string, offset, length)
3067 return binaryWrite(this, string, offset, length)
3070 // Warning: maxLength not taken into account in base64Write
3071 return base64Write(this, string, offset, length)
3077 return ucs2Write(this, string, offset, length)
3080 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3081 encoding = ('' + encoding).toLowerCase()
3087 Buffer.prototype.toJSON = function toJSON () {
3090 data: Array.prototype.slice.call(this._arr || this,
0)
3094 function base64Slice (buf, start, end) {
3095 if (start ===
0 && end === buf.length) {
3096 return base64.fromByteArray(buf)
3098 return base64.fromByteArray(buf.slice(start, end))
3102 function utf8Slice (buf, start, end) {
3103 end = Math.min(buf.length, end)
3108 var bytesPerSequence
3114 for (; i < end; i += bytesPerSequence) {
3118 if (firstByte
> 0xEF) {
3119 bytesPerSequence =
4
3120 } else if (firstByte
> 0xDF) {
3121 bytesPerSequence =
3
3122 } else if (firstByte
> 0xBF) {
3123 bytesPerSequence =
2
3125 bytesPerSequence =
1
3128 if (i + bytesPerSequence <= end) {
3129 switch (bytesPerSequence) {
3131 if (firstByte <
0x80) {
3132 codePoint = firstByte
3136 secondByte = buf[i +
1]
3137 if ((secondByte &
0xC0) ===
0x80) {
3138 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3139 if (tempCodePoint
> 0x7F) {
3140 codePoint = tempCodePoint
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
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
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
3180 return String.fromCharCode.apply(String, res)
3183 function asciiSlice (buf, start, end) {
3185 end = Math.min(buf.length, end)
3187 for (var i = start; i < end; i++) {
3188 ret += String.fromCharCode(buf[i] &
0x7F)
3193 function binarySlice (buf, start, end) {
3195 end = Math.min(buf.length, end)
3197 for (var i = start; i < end; i++) {
3198 ret += String.fromCharCode(buf[i])
3203 function hexSlice (buf, start, end) {
3204 var len = buf.length
3206 if (!start || start <
0) start =
0
3207 if (!end || end <
0 || end
> len) end = len
3210 for (var i = start; i < end; i++) {
3211 out += toHex(buf[i])
3216 function utf16leSlice (buf, start, end) {
3217 var bytes = buf.slice(start, end)
3219 for (var i =
0; i < bytes.length; i +=
2) {
3220 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3225 Buffer.prototype.slice = function slice (start, end) {
3226 var len = this.length
3228 end = end === undefined ? len : ~~end
3232 if (start <
0) start =
0
3233 } else if (start
> len) {
3239 if (end <
0) end =
0
3240 } else if (end
> len) {
3244 if (end < start) end = start
3247 if (Buffer.TYPED_ARRAY_SUPPORT) {
3248 newBuf = Buffer._augment(this.subarray(start, end))
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]
3257 if (newBuf.length) newBuf.parent = this.parent || this
3263 * Need to make sure that buffer isn't trying to write out of bounds.
3265 function checkOffset (offset, ext, length) {
3266 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3267 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3270 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3272 byteLength = byteLength |
0
3273 if (!noAssert) checkOffset(offset, byteLength, this.length)
3275 var val = this[offset]
3278 while (++i < byteLength && (mul *=
0x100)) {
3279 val += this[offset + i] * mul
3285 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3287 byteLength = byteLength |
0
3289 checkOffset(offset, byteLength, this.length)
3292 var val = this[offset + --byteLength]
3294 while (byteLength
> 0 && (mul *=
0x100)) {
3295 val += this[offset + --byteLength] * mul
3301 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3302 if (!noAssert) checkOffset(offset,
1, this.length)
3306 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3307 if (!noAssert) checkOffset(offset,
2, this.length)
3308 return this[offset] | (this[offset +
1] <<
8)
3311 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3312 if (!noAssert) checkOffset(offset,
2, this.length)
3313 return (this[offset] <<
8) | this[offset +
1]
3316 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3317 if (!noAssert) checkOffset(offset,
4, this.length)
3319 return ((this[offset]) |
3320 (this[offset +
1] <<
8) |
3321 (this[offset +
2] <<
16)) +
3322 (this[offset +
3] *
0x1000000)
3325 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3326 if (!noAssert) checkOffset(offset,
4, this.length)
3328 return (this[offset] *
0x1000000) +
3329 ((this[offset +
1] <<
16) |
3330 (this[offset +
2] <<
8) |
3334 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3336 byteLength = byteLength |
0
3337 if (!noAssert) checkOffset(offset, byteLength, this.length)
3339 var val = this[offset]
3342 while (++i < byteLength && (mul *=
0x100)) {
3343 val += this[offset + i] * mul
3347 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3352 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3354 byteLength = byteLength |
0
3355 if (!noAssert) checkOffset(offset, byteLength, this.length)
3359 var val = this[offset + --i]
3360 while (i
> 0 && (mul *=
0x100)) {
3361 val += this[offset + --i] * mul
3365 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3370 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3371 if (!noAssert) checkOffset(offset,
1, this.length)
3372 if (!(this[offset] &
0x80)) return (this[offset])
3373 return ((
0xff - this[offset] +
1) * -
1)
3376 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3377 if (!noAssert) checkOffset(offset,
2, this.length)
3378 var val = this[offset] | (this[offset +
1] <<
8)
3379 return (val &
0x8000) ? val |
0xFFFF0000 : val
3382 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset,
2, this.length)
3384 var val = this[offset +
1] | (this[offset] <<
8)
3385 return (val &
0x8000) ? val |
0xFFFF0000 : val
3388 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3389 if (!noAssert) checkOffset(offset,
4, this.length)
3391 return (this[offset]) |
3392 (this[offset +
1] <<
8) |
3393 (this[offset +
2] <<
16) |
3394 (this[offset +
3] <<
24)
3397 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3398 if (!noAssert) checkOffset(offset,
4, this.length)
3400 return (this[offset] <<
24) |
3401 (this[offset +
1] <<
16) |
3402 (this[offset +
2] <<
8) |
3406 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3407 if (!noAssert) checkOffset(offset,
4, this.length)
3408 return ieee754.read(this, offset, true,
23,
4)
3411 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3412 if (!noAssert) checkOffset(offset,
4, this.length)
3413 return ieee754.read(this, offset, false,
23,
4)
3416 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3417 if (!noAssert) checkOffset(offset,
8, this.length)
3418 return ieee754.read(this, offset, true,
52,
8)
3421 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3422 if (!noAssert) checkOffset(offset,
8, this.length)
3423 return ieee754.read(this, offset, false,
52,
8)
3426 function checkInt (buf, value, offset, ext, max, min) {
3427 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3428 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3429 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3432 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3435 byteLength = byteLength |
0
3436 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3440 this[offset] = value &
0xFF
3441 while (++i < byteLength && (mul *=
0x100)) {
3442 this[offset + i] = (value / mul) &
0xFF
3445 return offset + byteLength
3448 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3451 byteLength = byteLength |
0
3452 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3454 var i = byteLength -
1
3456 this[offset + i] = value &
0xFF
3457 while (--i
>=
0 && (mul *=
0x100)) {
3458 this[offset + i] = (value / mul) &
0xFF
3461 return offset + byteLength
3464 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3467 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3468 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3469 this[offset] = value
3473 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3474 if (value <
0) value =
0xffff + value +
1
3475 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3476 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3477 (littleEndian ? i :
1 - i) *
8
3481 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
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)
3489 objectWriteUInt16(this, value, offset, true)
3494 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
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
3502 objectWriteUInt16(this, value, offset, false)
3507 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3508 if (value <
0) value =
0xffffffff + value +
1
3509 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3510 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3514 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
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
3524 objectWriteUInt32(this, value, offset, true)
3529 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
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
3539 objectWriteUInt32(this, value, offset, false)
3544 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3548 var limit = Math.pow(
2,
8 * byteLength -
1)
3550 checkInt(this, value, offset, byteLength, limit -
1, -limit)
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
3561 return offset + byteLength
3564 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3568 var limit = Math.pow(
2,
8 * byteLength -
1)
3570 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3573 var i = byteLength -
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
3581 return offset + byteLength
3584 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
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
3594 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
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)
3602 objectWriteUInt16(this, value, offset, true)
3607 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
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
3615 objectWriteUInt16(this, value, offset, false)
3620 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
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)
3630 objectWriteUInt32(this, value, offset, true)
3635 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
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
3646 objectWriteUInt32(this, value, offset, false)
3651 function checkIEEE754 (buf, value, offset, ext, max, min) {
3652 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3653 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3654 if (offset <
0) throw new RangeError('index out of range')
3657 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3659 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3661 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3665 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3666 return writeFloat(this, value, offset, true, noAssert)
3669 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3670 return writeFloat(this, value, offset, false, noAssert)
3673 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3675 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3677 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3681 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3682 return writeDouble(this, value, offset, true, noAssert)
3685 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3686 return writeDouble(this, value, offset, false, noAssert)
3689 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3690 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3691 if (!start) start =
0
3692 if (!end && end !==
0) end = this.length
3693 if (targetStart
>= target.length) targetStart = target.length
3694 if (!targetStart) targetStart =
0
3695 if (end
> 0 && end < start) end = start
3697 // Copy
0 bytes; we're done
3698 if (end === start) return
0
3699 if (target.length ===
0 || this.length ===
0) return
0
3701 // Fatal error conditions
3702 if (targetStart <
0) {
3703 throw new RangeError('targetStart out of bounds')
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')
3709 if (end
> this.length) end = this.length
3710 if (target.length - targetStart < end - start) {
3711 end = target.length - targetStart + start
3714 var len = end - start
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]
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]
3728 target._set(this.subarray(start, start + len), targetStart)
3734 // fill(value, start=
0, end=buffer.length)
3735 Buffer.prototype.fill = function fill (value, start, end) {
3736 if (!value) value =
0
3737 if (!start) start =
0
3738 if (!end) end = this.length
3740 if (end < start) throw new RangeError('end < start')
3742 // Fill
0 bytes; we're done
3743 if (end === start) return
3744 if (this.length ===
0) return
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')
3750 if (typeof value === 'number') {
3751 for (i = start; i < end; i++) {
3755 var bytes = utf8ToBytes(value.toString())
3756 var len = bytes.length
3757 for (i = start; i < end; i++) {
3758 this[i] = bytes[i % len]
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.
3769 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3770 if (typeof Uint8Array !== 'undefined') {
3771 if (Buffer.TYPED_ARRAY_SUPPORT) {
3772 return (new Buffer(this)).buffer
3774 var buf = new Uint8Array(this.length)
3775 for (var i =
0, len = buf.length; i < len; i +=
1) {
3781 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3788 var BP = Buffer.prototype
3791 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3793 Buffer._augment = function _augment (arr) {
3794 arr.constructor = Buffer
3795 arr._isBuffer = true
3797 // save reference to original Uint8Array set method before overwriting
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
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
3850 arr.inspect = BP.inspect
3851 arr.toArrayBuffer = BP.toArrayBuffer
3856 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
3858 function base64clean (str) {
3859 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3860 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3861 // Node converts strings with length <
2 to ''
3862 if (str.length <
2) return ''
3863 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3864 while (str.length %
4 !==
0) {
3870 function stringtrim (str) {
3871 if (str.trim) return str.trim()
3872 return str.replace(/^\s+|\s+$/g, '')
3875 function toHex (n) {
3876 if (n <
16) return '
0' + n.toString(
16)
3877 return n.toString(
16)
3880 function utf8ToBytes (string, units) {
3881 units = units || Infinity
3883 var length = string.length
3884 var leadSurrogate = null
3887 for (var i =
0; i < length; i++) {
3888 codePoint = string.charCodeAt(i)
3890 // is surrogate component
3891 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
3892 // last char was a lead
3893 if (!leadSurrogate) {
3895 if (codePoint
> 0xDBFF) {
3897 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3900 } else if (i +
1 === length) {
3902 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3907 leadSurrogate = codePoint
3913 if (codePoint <
0xDC00) {
3914 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3915 leadSurrogate = codePoint
3919 // valid surrogate pair
3920 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
3922 } else if (leadSurrogate) {
3923 // valid bmp char, but last char was a lead
3924 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3927 leadSurrogate = null
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
3936 codePoint
>> 0x6 |
0xC0,
3937 codePoint &
0x3F |
0x80
3939 } else if (codePoint <
0x10000) {
3940 if ((units -=
3) <
0) break
3942 codePoint
>> 0xC |
0xE0,
3943 codePoint
>> 0x6 &
0x3F |
0x80,
3944 codePoint &
0x3F |
0x80
3946 } else if (codePoint <
0x110000) {
3947 if ((units -=
4) <
0) break
3949 codePoint
>> 0x12 |
0xF0,
3950 codePoint
>> 0xC &
0x3F |
0x80,
3951 codePoint
>> 0x6 &
0x3F |
0x80,
3952 codePoint &
0x3F |
0x80
3955 throw new Error('Invalid code point')
3962 function asciiToBytes (str) {
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)
3971 function utf16leToBytes (str, units) {
3974 for (var i =
0; i < str.length; i++) {
3975 if ((units -=
2) <
0) break
3977 c = str.charCodeAt(i)
3987 function base64ToBytes (str) {
3988 return base64.toByteArray(base64clean(str))
3991 function blitBuffer (src, dst, offset, length) {
3992 for (var i =
0; i < length; i++) {
3993 if ((i + offset
>= dst.length) || (i
>= src.length)) break
3994 dst[i + offset] = src[i]
3999 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4000 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4002 ;(function (exports) {
4005 var Arr = (typeof Uint8Array !== 'undefined')
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)
4017 function decode (elt) {
4018 var code = elt.charCodeAt(
0)
4019 if (code === PLUS ||
4020 code === PLUS_URL_SAFE)
4022 if (code === SLASH ||
4023 code === SLASH_URL_SAFE)
4026 return -
1 //no match
4027 if (code < NUMBER +
10)
4028 return code - NUMBER +
26 +
26
4029 if (code < UPPER +
26)
4031 if (code < LOWER +
26)
4032 return code - LOWER +
26
4035 function b64ToByteArray (b64) {
4036 var i, j, l, tmp, placeHolders, arr
4038 if (b64.length %
4 > 0) {
4039 throw new Error('Invalid string. Length must be a multiple of
4')
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
4050 // base64 is
4/
3 + up to two characters of the original data
4051 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4053 // if there are placeholders, only get up to the last complete
4 chars
4054 l = placeHolders
> 0 ? b64.length -
4 : b64.length
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)
4069 if (placeHolders ===
2) {
4070 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
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)
4081 function uint8ToBase64 (uint8) {
4083 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4087 function encode (num) {
4088 return lookup.charAt(num)
4091 function tripletToBase64 (num) {
4092 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
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)
4101 // pad the end with zeros, but make sure to not forget the extra bytes
4102 switch (extraBytes) {
4104 temp = uint8[uint8.length -
1]
4105 output += encode(temp
>> 2)
4106 output += encode((temp <<
4) &
0x3F)
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)
4121 exports.toByteArray = b64ToByteArray
4122 exports.fromByteArray = uint8ToBase64
4123 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4125 },{}],
9:[function(require,module,exports){
4126 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4128 var eLen = nBytes *
8 - mLen -
1
4129 var eMax = (
1 << eLen) -
1
4130 var eBias = eMax
>> 1
4132 var i = isLE ? (nBytes -
1) :
0
4133 var d = isLE ? -
1 :
1
4134 var s = buffer[offset + i]
4138 e = s & ((
1 << (-nBits)) -
1)
4141 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4143 m = e & ((
1 << (-nBits)) -
1)
4146 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4150 } else if (e === eMax) {
4151 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4153 m = m + Math.pow(
2, mLen)
4156 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4159 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
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
4169 value = Math.abs(value)
4171 if (isNaN(value) || value === Infinity) {
4172 m = isNaN(value) ?
1 :
0
4175 e = Math.floor(Math.log(value) / Math.LN2)
4176 if (value * (c = Math.pow(
2, -e)) <
1) {
4180 if (e + eBias
>=
1) {
4183 value += rt * Math.pow(
2,
1 - eBias)
4185 if (value * c
>=
2) {
4190 if (e + eBias
>= eMax) {
4193 } else if (e + eBias
>=
1) {
4194 m = (value * c -
1) * Math.pow(
2, mLen)
4197 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4202 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4206 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4208 buffer[offset + i - d] |= s *
128
4211 },{}],
10:[function(require,module,exports){
4217 var isArray = Array.isArray;
4223 var str = Object.prototype.toString;
4226 * Whether or not the given `val`
4233 * isArray(arguments);
4238 * @param {mixed} val
4242 module.exports = isArray || function (val) {
4243 return !! val && '[object Array]' == str.call(val);
4246 },{}],
11:[function(require,module,exports){
4247 // Copyright Joyent, Inc. and other Node contributors.
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:
4257 // The above copyright notice and this permission notice shall be included
4258 // in all copies or substantial portions of the Software.
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.
4268 function EventEmitter() {
4269 this._events = this._events || {};
4270 this._maxListeners = this._maxListeners || undefined;
4272 module.exports = EventEmitter;
4274 // Backwards-compat with node
0.10.x
4275 EventEmitter.EventEmitter = EventEmitter;
4277 EventEmitter.prototype._events = undefined;
4278 EventEmitter.prototype._maxListeners = undefined;
4280 // By default EventEmitters will print a warning if more than
10 listeners are
4281 // added to it. This is a useful default which helps finding memory leaks.
4282 EventEmitter.defaultMaxListeners =
10;
4284 // Obviously not all Emitters should be limited to
10. This function allows
4285 // that to be increased. Set to zero for unlimited.
4286 EventEmitter.prototype.setMaxListeners = function(n) {
4287 if (!isNumber(n) || n <
0 || isNaN(n))
4288 throw TypeError('n must be a positive number');
4289 this._maxListeners = n;
4293 EventEmitter.prototype.emit = function(type) {
4294 var er, handler, len, args, i, listeners;
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)) {
4304 if (er instanceof Error) {
4305 throw er; // Unhandled 'error' event
4307 throw TypeError('Uncaught, unspecified "error" event.');
4311 handler = this._events[type];
4313 if (isUndefined(handler))
4316 if (isFunction(handler)) {
4317 switch (arguments.length) {
4323 handler.call(this, arguments[
1]);
4326 handler.call(this, arguments[
1], arguments[
2]);
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);
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];
4342 listeners = handler.slice();
4343 len = listeners.length;
4344 for (i =
0; i < len; i++)
4345 listeners[i].apply(this, args);
4351 EventEmitter.prototype.addListener = function(type, listener) {
4354 if (!isFunction(listener))
4355 throw TypeError('listener must be a function');
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);
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);
4374 // Adding the second element, need to change to array.
4375 this._events[type] = [this._events[type], listener];
4377 // Check for listener leak
4378 if (isObject(this._events[type]) && !this._events[type].warned) {
4380 if (!isUndefined(this._maxListeners)) {
4381 m = this._maxListeners;
4383 m = EventEmitter.defaultMaxListeners;
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
4402 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4404 EventEmitter.prototype.once = function(type, listener) {
4405 if (!isFunction(listener))
4406 throw TypeError('listener must be a function');
4411 this.removeListener(type, g);
4415 listener.apply(this, arguments);
4419 g.listener = listener;
4425 // emits a 'removeListener' event iff the listener was removed
4426 EventEmitter.prototype.removeListener = function(type, listener) {
4427 var list, position, length, i;
4429 if (!isFunction(listener))
4430 throw TypeError('listener must be a function');
4432 if (!this._events || !this._events[type])
4435 list = this._events[type];
4436 length = list.length;
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);
4445 } else if (isObject(list)) {
4446 for (i = length; i--
> 0;) {
4447 if (list[i] === listener ||
4448 (list[i].listener && list[i].listener === listener)) {
4457 if (list.length ===
1) {
4459 delete this._events[type];
4461 list.splice(position,
1);
4464 if (this._events.removeListener)
4465 this.emit('removeListener', type, listener);
4471 EventEmitter.prototype.removeAllListeners = function(type) {
4477 // not listening for removeListener, no need to emit
4478 if (!this._events.removeListener) {
4479 if (arguments.length ===
0)
4481 else if (this._events[type])
4482 delete this._events[type];
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);
4492 this.removeAllListeners('removeListener');
4497 listeners = this._events[type];
4499 if (isFunction(listeners)) {
4500 this.removeListener(type, listeners);
4503 while (listeners.length)
4504 this.removeListener(type, listeners[listeners.length -
1]);
4506 delete this._events[type];
4511 EventEmitter.prototype.listeners = function(type) {
4513 if (!this._events || !this._events[type])
4515 else if (isFunction(this._events[type]))
4516 ret = [this._events[type]];
4518 ret = this._events[type].slice();
4522 EventEmitter.listenerCount = function(emitter, type) {
4524 if (!emitter._events || !emitter._events[type])
4526 else if (isFunction(emitter._events[type]))
4529 ret = emitter._events[type].length;
4533 function isFunction(arg) {
4534 return typeof arg === 'function';
4537 function isNumber(arg) {
4538 return typeof arg === 'number';
4541 function isObject(arg) {
4542 return typeof arg === 'object' && arg !== null;
4545 function isUndefined(arg) {
4546 return arg === void
0;
4549 },{}],
12:[function(require,module,exports){
4550 if (typeof Object.create === 'function') {
4551 // implementation from standard node.js 'util' module
4552 module.exports = function inherits(ctor, superCtor) {
4553 ctor.super_ = superCtor
4554 ctor.prototype = Object.create(superCtor.prototype, {
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
4574 },{}],
13:[function(require,module,exports){
4575 module.exports = Array.isArray || function (arr) {
4576 return Object.prototype.toString.call(arr) == '[object Array]';
4579 },{}],
14:[function(require,module,exports){
4580 // shim for using process in browser
4582 var process = module.exports = {};
4584 var draining = false;
4586 var queueIndex = -
1;
4588 function cleanUpNextTick() {
4590 if (currentQueue.length) {
4591 queue = currentQueue.concat(queue);
4600 function drainQueue() {
4604 var timeout = setTimeout(cleanUpNextTick);
4607 var len = queue.length;
4609 currentQueue = queue;
4611 while (++queueIndex < len) {
4612 currentQueue[queueIndex].run();
4617 currentQueue = null;
4619 clearTimeout(timeout);
4622 process.nextTick = function (fun) {
4623 var args = new Array(arguments.length -
1);
4624 if (arguments.length
> 1) {
4625 for (var i =
1; i < arguments.length; i++) {
4626 args[i -
1] = arguments[i];
4629 queue.push(new Item(fun, args));
4630 if (queue.length ===
1 && !draining) {
4631 setTimeout(drainQueue,
0);
4635 // v8 likes predictible objects
4636 function Item(fun, array) {
4640 Item.prototype.run = function () {
4641 this.fun.apply(null, this.array);
4643 process.title = 'browser';
4644 process.browser = true;
4647 process.version = ''; // empty string to avoid regexp issues
4648 process.versions = {};
4653 process.addListener = noop;
4654 process.once = noop;
4656 process.removeListener = noop;
4657 process.removeAllListeners = noop;
4658 process.emit = noop;
4660 process.binding = function (name) {
4661 throw new Error('process.binding is not supported');
4665 process.cwd = function () { return '/' };
4666 process.chdir = function (dir) {
4667 throw new Error('process.chdir is not supported');
4669 process.umask = function() { return
0; };
4671 },{}],
15:[function(require,module,exports){
4672 module.exports = require(
"./lib/_stream_duplex.js")
4674 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4675 (function (process){
4676 // Copyright Joyent, Inc. and other Node contributors.
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:
4686 // The above copyright notice and this permission notice shall be included
4687 // in all copies or substantial portions of the Software.
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.
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
4702 module.exports = Duplex;
4705 var objectKeys = Object.keys || function (obj) {
4707 for (var key in obj) keys.push(key);
4714 var util = require('core-util-is');
4715 util.inherits = require('inherits');
4718 var Readable = require('./_stream_readable');
4719 var Writable = require('./_stream_writable');
4721 util.inherits(Duplex, Readable);
4723 forEach(objectKeys(Writable.prototype), function(method) {
4724 if (!Duplex.prototype[method])
4725 Duplex.prototype[method] = Writable.prototype[method];
4728 function Duplex(options) {
4729 if (!(this instanceof Duplex))
4730 return new Duplex(options);
4732 Readable.call(this, options);
4733 Writable.call(this, options);
4735 if (options && options.readable === false)
4736 this.readable = false;
4738 if (options && options.writable === false)
4739 this.writable = false;
4741 this.allowHalfOpen = true;
4742 if (options && options.allowHalfOpen === false)
4743 this.allowHalfOpen = false;
4745 this.once('end', onend);
4748 // the no-half-open enforcer
4750 // if we allow half-open state, or if the writable side ended,
4752 if (this.allowHalfOpen || this._writableState.ended)
4755 // no more data can be written.
4756 // But allow more writes to happen in this tick.
4757 process.nextTick(this.end.bind(this));
4760 function forEach (xs, f) {
4761 for (var i =
0, l = xs.length; i < l; i++) {
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.
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:
4778 // The above copyright notice and this permission notice shall be included
4779 // in all copies or substantial portions of the Software.
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.
4789 // a passthrough stream.
4790 // basically just the most minimal sort of Transform stream.
4791 // Every written chunk gets output as-is.
4793 module.exports = PassThrough;
4795 var Transform = require('./_stream_transform');
4798 var util = require('core-util-is');
4799 util.inherits = require('inherits');
4802 util.inherits(PassThrough, Transform);
4804 function PassThrough(options) {
4805 if (!(this instanceof PassThrough))
4806 return new PassThrough(options);
4808 Transform.call(this, options);
4811 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4815 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
4816 (function (process){
4817 // Copyright Joyent, Inc. and other Node contributors.
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:
4827 // The above copyright notice and this permission notice shall be included
4828 // in all copies or substantial portions of the Software.
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.
4838 module.exports = Readable;
4841 var isArray = require('isarray');
4846 var Buffer = require('buffer').Buffer;
4849 Readable.ReadableState = ReadableState;
4851 var EE = require('events').EventEmitter;
4854 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4855 return emitter.listeners(type).length;
4859 var Stream = require('stream');
4862 var util = require('core-util-is');
4863 util.inherits = require('inherits');
4870 var debug = require('util');
4871 if (debug && debug.debuglog) {
4872 debug = debug.debuglog('stream');
4874 debug = function () {};
4879 util.inherits(Readable, Stream);
4881 function ReadableState(options, stream) {
4882 var Duplex = require('./_stream_duplex');
4884 options = options || {};
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;
4893 this.highWaterMark = ~~this.highWaterMark;
4898 this.pipesCount =
0;
4899 this.flowing = null;
4901 this.endEmitted = false;
4902 this.reading = false;
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.
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;
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;
4921 if (stream instanceof Duplex)
4922 this.objectMode = this.objectMode || !!options.readableObjectMode;
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';
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;
4933 // the number of writers that are awaiting a drain event in .pipe()s
4934 this.awaitDrain =
0;
4936 // if true, a maybeReadMore has been scheduled
4937 this.readingMore = false;
4939 this.decoder = null;
4940 this.encoding = null;
4941 if (options.encoding) {
4943 StringDecoder = require('string_decoder/').StringDecoder;
4944 this.decoder = new StringDecoder(options.encoding);
4945 this.encoding = options.encoding;
4949 function Readable(options) {
4950 var Duplex = require('./_stream_duplex');
4952 if (!(this instanceof Readable))
4953 return new Readable(options);
4955 this._readableState = new ReadableState(options, this);
4958 this.readable = true;
4963 // Manually shove something into the read() buffer.
4964 // This returns true if the highWaterMark has not been hit yet,
4965 // similar to how Writable.write() returns true if you should
4966 // write() some more.
4967 Readable.prototype.push = function(chunk, encoding) {
4968 var state = this._readableState;
4970 if (util.isString(chunk) && !state.objectMode) {
4971 encoding = encoding || state.defaultEncoding;
4972 if (encoding !== state.encoding) {
4973 chunk = new Buffer(chunk, encoding);
4978 return readableAddChunk(this, state, chunk, encoding, false);
4981 // Unshift should *always* be something directly out of read()
4982 Readable.prototype.unshift = function(chunk) {
4983 var state = this._readableState;
4984 return readableAddChunk(this, state, chunk, '', true);
4987 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4988 var er = chunkInvalid(state, chunk);
4990 stream.emit('error', er);
4991 } else if (util.isNullOrUndefined(chunk)) {
4992 state.reading = false;
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);
5003 if (state.decoder && !addToFront && !encoding)
5004 chunk = state.decoder.write(chunk);
5007 state.reading = false;
5009 // if we want the data now, just emit it.
5010 if (state.flowing && state.length ===
0 && !state.sync) {
5011 stream.emit('data', chunk);
5014 // update the buffer info.
5015 state.length += state.objectMode ?
1 : chunk.length;
5017 state.buffer.unshift(chunk);
5019 state.buffer.push(chunk);
5021 if (state.needReadable)
5022 emitReadable(stream);
5025 maybeReadMore(stream, state);
5027 } else if (!addToFront) {
5028 state.reading = false;
5031 return needMoreData(state);
5036 // if it's past the high water mark, we can push in some more.
5037 // Also, if we have no data yet, we can stand some
5038 // more bytes. This is to work around cases where hwm=
0,
5039 // such as the repl. Also, if the push() triggered a
5040 // readable event, and the user called read(largeNumber) such that
5041 // needReadable was set, then we ought to push more, so that another
5042 // 'readable' event will be triggered.
5043 function needMoreData(state) {
5044 return !state.ended &&
5045 (state.needReadable ||
5046 state.length < state.highWaterMark ||
5047 state.length ===
0);
5050 // backwards compatibility.
5051 Readable.prototype.setEncoding = function(enc) {
5053 StringDecoder = require('string_decoder/').StringDecoder;
5054 this._readableState.decoder = new StringDecoder(enc);
5055 this._readableState.encoding = enc;
5059 // Don't raise the hwm
> 128MB
5060 var MAX_HWM =
0x800000;
5061 function roundUpToNextPowerOf2(n) {
5065 // Get the next highest power of
2
5067 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5073 function howMuchToRead(n, state) {
5074 if (state.length ===
0 && state.ended)
5077 if (state.objectMode)
5078 return n ===
0 ?
0 :
1;
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;
5085 return state.length;
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
5095 if (n
> state.highWaterMark)
5096 state.highWaterMark = roundUpToNextPowerOf2(n);
5098 // don't have that much. return null, unless we've ended.
5099 if (n
> state.length) {
5101 state.needReadable = true;
5104 return state.length;
5110 // you can override either this method, or the async _read(n) below.
5111 Readable.prototype.read = function(n) {
5113 var state = this._readableState;
5116 if (!util.isNumber(n) || n
> 0)
5117 state.emittedReadable = false;
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.
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)
5133 n = howMuchToRead(n, state);
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)
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.
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.
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
5162 //
3. Actually pull the requested chunks out of the buffer and return.
5164 // if we need a readable event, then we need to do some reading.
5165 var doRead = state.needReadable;
5166 debug('need readable', doRead);
5168 // if we currently have less than the highWaterMark, then also read some
5169 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5171 debug('length less than watermark', doRead);
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) {
5178 debug('reading or ended', doRead);
5183 state.reading = 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);
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);
5200 ret = fromList(n, state);
5204 if (util.isNull(ret)) {
5205 state.needReadable = true;
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;
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)
5220 if (!util.isNull(ret))
5221 this.emit('data', ret);
5226 function chunkInvalid(state, chunk) {
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');
5238 function onEofChunk(stream, state) {
5239 if (state.decoder && !state.ended) {
5240 var chunk = state.decoder.end();
5241 if (chunk && chunk.length) {
5242 state.buffer.push(chunk);
5243 state.length += state.objectMode ?
1 : chunk.length;
5248 // emit 'readable' now to make sure it gets picked up.
5249 emitReadable(stream);
5252 // Don't emit readable right away in sync mode, because this can trigger
5253 // another read() call =
> stack overflow. This way, it might trigger
5254 // a nextTick recursion warning, but that's not so bad.
5255 function emitReadable(stream) {
5256 var state = stream._readableState;
5257 state.needReadable = false;
5258 if (!state.emittedReadable) {
5259 debug('emitReadable', state.flowing);
5260 state.emittedReadable = true;
5262 process.nextTick(function() {
5263 emitReadable_(stream);
5266 emitReadable_(stream);
5270 function emitReadable_(stream) {
5271 debug('emit readable');
5272 stream.emit('readable');
5277 // at this point, the user has presumably seen the 'readable' event,
5278 // and called read() to consume some data. that may have triggered
5279 // in turn another _read(n) call, in which case reading = true if
5280 // it's in progress.
5281 // However, if we're not ended, or reading, and the length < hwm,
5282 // then go ahead and try to read some more preemptively.
5283 function maybeReadMore(stream, state) {
5284 if (!state.readingMore) {
5285 state.readingMore = true;
5286 process.nextTick(function() {
5287 maybeReadMore_(stream, state);
5292 function maybeReadMore_(stream, state) {
5293 var len = state.length;
5294 while (!state.reading && !state.flowing && !state.ended &&
5295 state.length < state.highWaterMark) {
5296 debug('maybeReadMore read
0');
5298 if (len === state.length)
5299 // didn't get any data, stop spinning.
5304 state.readingMore = false;
5307 // abstract method. to be overridden in specific implementation classes.
5308 // call cb(er, data) where data is <= n in length.
5309 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5310 // arbitrary, and perhaps not very meaningful.
5311 Readable.prototype._read = function(n) {
5312 this.emit('error', new Error('not implemented'));
5315 Readable.prototype.pipe = function(dest, pipeOpts) {
5317 var state = this._readableState;
5319 switch (state.pipesCount) {
5324 state.pipes = [state.pipes, dest];
5327 state.pipes.push(dest);
5330 state.pipesCount +=
1;
5331 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5333 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5334 dest !== process.stdout &&
5335 dest !== process.stderr;
5337 var endFn = doEnd ? onend : cleanup;
5338 if (state.endEmitted)
5339 process.nextTick(endFn);
5341 src.once('end', endFn);
5343 dest.on('unpipe', onunpipe);
5344 function onunpipe(readable) {
5346 if (readable === src) {
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
5360 var ondrain = pipeOnDrain(src);
5361 dest.on('drain', ondrain);
5363 function 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);
5375 // if the reader is waiting for a drain event from this
5376 // specific writer, then it would cause it to never start
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))
5385 src.on('data', ondata);
5386 function ondata(chunk) {
5388 var ret = dest.write(chunk);
5389 if (false === ret) {
5390 debug('false write response, pause',
5391 src._readableState.awaitDrain);
5392 src._readableState.awaitDrain++;
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);
5402 dest.removeListener('error', onerror);
5403 if (EE.listenerCount(dest, 'error') ===
0)
5404 dest.emit('error', er);
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);
5413 dest._events.error = [onerror, dest._events.error];
5417 // Both close and finish should trigger unpipe, but only once.
5418 function onclose() {
5419 dest.removeListener('finish', onfinish);
5422 dest.once('close', onclose);
5423 function onfinish() {
5425 dest.removeListener('close', onclose);
5428 dest.once('finish', onfinish);
5435 // tell the dest that it's being piped to
5436 dest.emit('pipe', src);
5438 // start the flow if it hasn't been started already.
5439 if (!state.flowing) {
5440 debug('pipe resume');
5447 function pipeOnDrain(src) {
5449 var state = src._readableState;
5450 debug('pipeOnDrain', state.awaitDrain);
5451 if (state.awaitDrain)
5453 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5454 state.flowing = true;
5461 Readable.prototype.unpipe = function(dest) {
5462 var state = this._readableState;
5464 // if we're not piping anywhere, then do nothing.
5465 if (state.pipesCount ===
0)
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)
5479 state.pipesCount =
0;
5480 state.flowing = false;
5482 dest.emit('unpipe', this);
5486 // slow case. multiple pipe destinations.
5490 var dests = state.pipes;
5491 var len = state.pipesCount;
5493 state.pipesCount =
0;
5494 state.flowing = false;
5496 for (var i =
0; i < len; i++)
5497 dests[i].emit('unpipe', this);
5501 // try to find the right one.
5502 var i = indexOf(state.pipes, dest);
5506 state.pipes.splice(i,
1);
5507 state.pipesCount -=
1;
5508 if (state.pipesCount ===
1)
5509 state.pipes = state.pipes[
0];
5511 dest.emit('unpipe', this);
5516 // set up data events if they are asked for
5517 // Ensure readable listeners eventually get something
5518 Readable.prototype.on = function(ev, fn) {
5519 var res = Stream.prototype.on.call(this, ev, fn);
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) {
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) {
5535 process.nextTick(function() {
5536 debug('readable nexttick read
0');
5539 } else if (state.length) {
5540 emitReadable(this, state);
5547 Readable.prototype.addListener = Readable.prototype.on;
5549 // pause() and resume() are remnants of the legacy readable stream API
5550 // If the user uses them, then switch into old mode.
5551 Readable.prototype.resume = function() {
5552 var state = this._readableState;
5553 if (!state.flowing) {
5555 state.flowing = true;
5556 if (!state.reading) {
5557 debug('resume read
0');
5560 resume(this, state);
5565 function resume(stream, state) {
5566 if (!state.resumeScheduled) {
5567 state.resumeScheduled = true;
5568 process.nextTick(function() {
5569 resume_(stream, state);
5574 function resume_(stream, state) {
5575 state.resumeScheduled = false;
5576 stream.emit('resume');
5578 if (state.flowing && !state.reading)
5582 Readable.prototype.pause = function() {
5583 debug('call pause flowing=%j', this._readableState.flowing);
5584 if (false !== this._readableState.flowing) {
5586 this._readableState.flowing = false;
5592 function flow(stream) {
5593 var state = stream._readableState;
5594 debug('flow', state.flowing);
5595 if (state.flowing) {
5597 var chunk = stream.read();
5598 } while (null !== chunk && state.flowing);
5602 // wrap an old-style stream as the async data source.
5603 // This is *not* part of the readable stream interface.
5604 // It is an ugly unfortunate mess of history.
5605 Readable.prototype.wrap = function(stream) {
5606 var state = this._readableState;
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)
5621 stream.on('data', function(chunk) {
5622 debug('wrapped data');
5624 chunk = state.decoder.write(chunk);
5625 if (!chunk || !state.objectMode && !chunk.length)
5628 var ret = self.push(chunk);
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);
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));
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);
5666 // exposed for testing purposes only.
5667 Readable._fromList = fromList;
5669 // Pluck off n bytes from an array of buffers.
5670 // Length is the combined lengths of all the buffers in the list.
5671 function fromList(n, state) {
5672 var list = state.buffer;
5673 var length = state.length;
5674 var stringMode = !!state.decoder;
5675 var objectMode = !!state.objectMode;
5678 // nothing in the list, definitely empty.
5679 if (list.length ===
0)
5684 else if (objectMode)
5686 else if (!n || n
>= length) {
5687 // read it all, truncate the array.
5689 ret = list.join('');
5691 ret = Buffer.concat(list, length);
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.
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
5706 // we have enough to cover it, but it spans past the first buffer.
5710 ret = new Buffer(n);
5713 for (var i =
0, l = list.length; i < l && c < n; i++) {
5715 var cpy = Math.min(n - c, buf.length);
5718 ret += buf.slice(
0, cpy);
5720 buf.copy(ret, c,
0, cpy);
5722 if (cpy < buf.length)
5723 list[
0] = buf.slice(cpy);
5735 function endReadable(stream) {
5736 var state = stream._readableState;
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');
5743 if (!state.endEmitted) {
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;
5756 function forEach (xs, f) {
5757 for (var i =
0, l = xs.length; i < l; i++) {
5762 function indexOf (xs, x) {
5763 for (var i =
0, l = xs.length; i < l; i++) {
5764 if (xs[i] === x) return i;
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.
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:
5781 // The above copyright notice and this permission notice shall be included
5782 // in all copies or substantial portions of the Software.
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.
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.)
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.
5804 // Here's how this works:
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.
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.
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.
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.
5835 module.exports = Transform;
5837 var Duplex = require('./_stream_duplex');
5840 var util = require('core-util-is');
5841 util.inherits = require('inherits');
5844 util.inherits(Transform, Duplex);
5847 function TransformState(options, stream) {
5848 this.afterTransform = function(er, data) {
5849 return afterTransform(stream, er, data);
5852 this.needTransform = false;
5853 this.transforming = false;
5854 this.writecb = null;
5855 this.writechunk = null;
5858 function afterTransform(stream, er, data) {
5859 var ts = stream._transformState;
5860 ts.transforming = false;
5862 var cb = ts.writecb;
5865 return stream.emit('error', new Error('no writecb in Transform class'));
5867 ts.writechunk = null;
5870 if (!util.isNullOrUndefined(data))
5876 var rs = stream._readableState;
5878 if (rs.needReadable || rs.length < rs.highWaterMark) {
5879 stream._read(rs.highWaterMark);
5884 function Transform(options) {
5885 if (!(this instanceof Transform))
5886 return new Transform(options);
5888 Duplex.call(this, options);
5890 this._transformState = new TransformState(options, this);
5892 // when the writable side finishes, then flush out anything remaining.
5895 // start out asking for a readable event once data is transformed.
5896 this._readableState.needReadable = true;
5898 // we have implemented the _read method, and done the other things
5899 // that Readable wants before the first _read call, so unset the
5901 this._readableState.sync = false;
5903 this.once('prefinish', function() {
5904 if (util.isFunction(this._flush))
5905 this._flush(function(er) {
5913 Transform.prototype.push = function(chunk, encoding) {
5914 this._transformState.needTransform = false;
5915 return Duplex.prototype.push.call(this, chunk, encoding);
5918 // This is the part where you do stuff!
5919 // override this function in implementation classes.
5920 // 'chunk' is an input chunk.
5922 // Call `push(newChunk)` to pass along transformed output
5923 // to the readable side. You may call 'push' zero or more times.
5925 // Call `cb(err)` when you are done with this chunk. If you pass
5926 // an error, then that'll put the hurt on the whole operation. If you
5927 // never call cb(), then you'll never get another chunk.
5928 Transform.prototype._transform = function(chunk, encoding, cb) {
5929 throw new Error('not implemented');
5932 Transform.prototype._write = function(chunk, encoding, cb) {
5933 var ts = this._transformState;
5935 ts.writechunk = chunk;
5936 ts.writeencoding = encoding;
5937 if (!ts.transforming) {
5938 var rs = this._readableState;
5939 if (ts.needTransform ||
5941 rs.length < rs.highWaterMark)
5942 this._read(rs.highWaterMark);
5946 // Doesn't matter what the args are here.
5947 // _transform does all the work.
5948 // That we got here means that the readable side wants more data.
5949 Transform.prototype._read = function(n) {
5950 var ts = this._transformState;
5952 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5953 ts.transforming = true;
5954 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
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;
5963 function done(stream, er) {
5965 return stream.emit('error', er);
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;
5973 throw new Error('calling transform done when ws.length !=
0');
5975 if (ts.transforming)
5976 throw new Error('calling transform done when still transforming');
5978 return stream.push(null);
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.
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:
5993 // The above copyright notice and this permission notice shall be included
5994 // in all copies or substantial portions of the Software.
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.
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.
6008 module.exports = Writable;
6011 var Buffer = require('buffer').Buffer;
6014 Writable.WritableState = WritableState;
6018 var util = require('core-util-is');
6019 util.inherits = require('inherits');
6022 var Stream = require('stream');
6024 util.inherits(Writable, Stream);
6026 function WriteReq(chunk, encoding, cb) {
6028 this.encoding = encoding;
6032 function WritableState(options, stream) {
6033 var Duplex = require('./_stream_duplex');
6035 options = options || {};
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;
6044 // object stream flag to indicate whether or not this stream
6045 // contains buffers or objects.
6046 this.objectMode = !!options.objectMode;
6048 if (stream instanceof Duplex)
6049 this.objectMode = this.objectMode || !!options.writableObjectMode;
6052 this.highWaterMark = ~~this.highWaterMark;
6054 this.needDrain = false;
6055 // at the start of calling end()
6056 this.ending = false;
6057 // when end() has been called, and returned
6059 // when 'finish' is emitted
6060 this.finished = false;
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;
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';
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
6078 // a flag to see when we're in the middle of a write.
6079 this.writing = false;
6081 // when true all writes will be buffered until .uncork() call
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.
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;
6095 // the callback that's passed to _write(chunk,cb)
6096 this.onwrite = function(er) {
6097 onwrite(stream, er);
6100 // the callback that the user supplies to write(chunk,encoding,cb)
6101 this.writecb = null;
6103 // the amount that is being written when _write is called.
6108 // number of pending user-supplied write callbacks
6109 // this must be
0 before 'finish' can be emitted
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;
6116 // True if the error was already emitted and should not be thrown again
6117 this.errorEmitted = false;
6120 function Writable(options) {
6121 var Duplex = require('./_stream_duplex');
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);
6128 this._writableState = new WritableState(options, this);
6131 this.writable = true;
6136 // Otherwise people can pipe Writable streams, which is just wrong.
6137 Writable.prototype.pipe = function() {
6138 this.emit('error', new Error('Cannot pipe. Not readable.'));
6142 function writeAfterEnd(stream, state, cb) {
6143 var er = new Error('write after end');
6144 // TODO: defer error events consistently everywhere, not just the cb
6145 stream.emit('error', er);
6146 process.nextTick(function() {
6151 // If we get something that is not a buffer, string, null, or undefined,
6152 // and we're not in objectMode, then that's an error.
6153 // Otherwise stream chunks are all considered to be of length=
1, and the
6154 // watermarks determine how many objects to keep in the buffer, rather than
6155 // how many bytes or characters.
6156 function validChunk(stream, state, chunk, cb) {
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() {
6172 Writable.prototype.write = function(chunk, encoding, cb) {
6173 var state = this._writableState;
6176 if (util.isFunction(encoding)) {
6181 if (util.isBuffer(chunk))
6182 encoding = 'buffer';
6184 encoding = state.defaultEncoding;
6186 if (!util.isFunction(cb))
6190 writeAfterEnd(this, state, cb);
6191 else if (validChunk(this, state, chunk, cb)) {
6193 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6199 Writable.prototype.cork = function() {
6200 var state = this._writableState;
6205 Writable.prototype.uncork = function() {
6206 var state = this._writableState;
6211 if (!state.writing &&
6214 !state.bufferProcessing &&
6215 state.buffer.length)
6216 clearBuffer(this, state);
6220 function decodeChunk(state, chunk, encoding) {
6221 if (!state.objectMode &&
6222 state.decodeStrings !== false &&
6223 util.isString(chunk)) {
6224 chunk = new Buffer(chunk, encoding);
6229 // if we're already writing something, then just put this
6230 // in the queue, and wait our turn. Otherwise, call _write
6231 // If we return false, then we need a drain event, so set that flag.
6232 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6233 chunk = decodeChunk(state, chunk, encoding);
6234 if (util.isBuffer(chunk))
6235 encoding = 'buffer';
6236 var len = state.objectMode ?
1 : chunk.length;
6238 state.length += len;
6240 var ret = state.length < state.highWaterMark;
6241 // we must ensure that previous needDrain will not be reset to false.
6243 state.needDrain = true;
6245 if (state.writing || state.corked)
6246 state.buffer.push(new WriteReq(chunk, encoding, cb));
6248 doWrite(stream, state, false, len, chunk, encoding, cb);
6253 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6254 state.writelen = len;
6256 state.writing = true;
6259 stream._writev(chunk, state.onwrite);
6261 stream._write(chunk, encoding, state.onwrite);
6265 function onwriteError(stream, state, sync, er, cb) {
6267 process.nextTick(function() {
6276 stream._writableState.errorEmitted = true;
6277 stream.emit('error', er);
6280 function onwriteStateUpdate(state) {
6281 state.writing = false;
6282 state.writecb = null;
6283 state.length -= state.writelen;
6287 function onwrite(stream, er) {
6288 var state = stream._writableState;
6289 var sync = state.sync;
6290 var cb = state.writecb;
6292 onwriteStateUpdate(state);
6295 onwriteError(stream, state, sync, er, cb);
6297 // Check if we're actually ready to finish, but don't emit yet
6298 var finished = needFinish(stream, state);
6302 !state.bufferProcessing &&
6303 state.buffer.length) {
6304 clearBuffer(stream, state);
6308 process.nextTick(function() {
6309 afterWrite(stream, state, finished, cb);
6312 afterWrite(stream, state, finished, cb);
6317 function afterWrite(stream, state, finished, cb) {
6319 onwriteDrain(stream, state);
6322 finishMaybe(stream, state);
6325 // Must force callback to be called on nextTick, so that we don't
6326 // emit 'drain' before the write() consumer gets the 'false' return
6327 // value, and has a chance to attach a 'drain' listener.
6328 function onwriteDrain(stream, state) {
6329 if (state.length ===
0 && state.needDrain) {
6330 state.needDrain = false;
6331 stream.emit('drain');
6336 // if there's something in the buffer waiting, then process it
6337 function clearBuffer(stream, state) {
6338 state.bufferProcessing = true;
6340 if (stream._writev && state.buffer.length
> 1) {
6341 // Fast case, write everything using _writev()
6343 for (var c =
0; c < state.buffer.length; c++)
6344 cbs.push(state.buffer[c].callback);
6346 // count the one we are adding, as well.
6347 // TODO(isaacs) clean this up
6349 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6350 for (var i =
0; i < cbs.length; i++) {
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;
6367 doWrite(stream, state, false, len, chunk, encoding, cb);
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) {
6379 if (c < state.buffer.length)
6380 state.buffer = state.buffer.slice(c);
6382 state.buffer.length =
0;
6385 state.bufferProcessing = false;
6388 Writable.prototype._write = function(chunk, encoding, cb) {
6389 cb(new Error('not implemented'));
6393 Writable.prototype._writev = null;
6395 Writable.prototype.end = function(chunk, encoding, cb) {
6396 var state = this._writableState;
6398 if (util.isFunction(chunk)) {
6402 } else if (util.isFunction(encoding)) {
6407 if (!util.isNullOrUndefined(chunk))
6408 this.write(chunk, encoding);
6410 // .end() fully uncorks
6416 // ignore unnecessary end() calls.
6417 if (!state.ending && !state.finished)
6418 endWritable(this, state, cb);
6422 function needFinish(stream, state) {
6423 return (state.ending &&
6424 state.length ===
0 &&
6429 function prefinish(stream, state) {
6430 if (!state.prefinished) {
6431 state.prefinished = true;
6432 stream.emit('prefinish');
6436 function finishMaybe(stream, state) {
6437 var need = needFinish(stream, state);
6439 if (state.pendingcb ===
0) {
6440 prefinish(stream, state);
6441 state.finished = true;
6442 stream.emit('finish');
6444 prefinish(stream, state);
6449 function endWritable(stream, state, cb) {
6450 state.ending = true;
6451 finishMaybe(stream, state);
6454 process.nextTick(cb);
6456 stream.once('finish', cb);
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){
6464 // Copyright Joyent, Inc. and other Node contributors.
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:
6474 // The above copyright notice and this permission notice shall be included
6475 // in all copies or substantial portions of the Software.
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.
6485 // NOTE: These type checking functions intentionally don't use `instanceof`
6486 // because it is fragile and can be easily faked with `Object.create()`.
6487 function isArray(ar) {
6488 return Array.isArray(ar);
6490 exports.isArray = isArray;
6492 function isBoolean(arg) {
6493 return typeof arg === 'boolean';
6495 exports.isBoolean = isBoolean;
6497 function isNull(arg) {
6498 return arg === null;
6500 exports.isNull = isNull;
6502 function isNullOrUndefined(arg) {
6505 exports.isNullOrUndefined = isNullOrUndefined;
6507 function isNumber(arg) {
6508 return typeof arg === 'number';
6510 exports.isNumber = isNumber;
6512 function isString(arg) {
6513 return typeof arg === 'string';
6515 exports.isString = isString;
6517 function isSymbol(arg) {
6518 return typeof arg === 'symbol';
6520 exports.isSymbol = isSymbol;
6522 function isUndefined(arg) {
6523 return arg === void
0;
6525 exports.isUndefined = isUndefined;
6527 function isRegExp(re) {
6528 return isObject(re) && objectToString(re) === '[object RegExp]';
6530 exports.isRegExp = isRegExp;
6532 function isObject(arg) {
6533 return typeof arg === 'object' && arg !== null;
6535 exports.isObject = isObject;
6537 function isDate(d) {
6538 return isObject(d) && objectToString(d) === '[object Date]';
6540 exports.isDate = isDate;
6542 function isError(e) {
6543 return isObject(e) &&
6544 (objectToString(e) === '[object Error]' || e instanceof Error);
6546 exports.isError = isError;
6548 function isFunction(arg) {
6549 return typeof arg === 'function';
6551 exports.isFunction = isFunction;
6553 function isPrimitive(arg) {
6554 return arg === null ||
6555 typeof arg === 'boolean' ||
6556 typeof arg === 'number' ||
6557 typeof arg === 'string' ||
6558 typeof arg === 'symbol' || // ES6 symbol
6559 typeof arg === 'undefined';
6561 exports.isPrimitive = isPrimitive;
6563 function isBuffer(arg) {
6564 return Buffer.isBuffer(arg);
6566 exports.isBuffer = isBuffer;
6568 function objectToString(o) {
6569 return Object.prototype.toString.call(o);
6571 }).call(this,require(
"buffer").Buffer)
6572 },{
"buffer":
7}],
22:[function(require,module,exports){
6573 module.exports = require(
"./lib/_stream_passthrough.js")
6575 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6576 exports = module.exports = require('./lib/_stream_readable.js');
6577 exports.Stream = require('stream');
6578 exports.Readable = exports;
6579 exports.Writable = require('./lib/_stream_writable.js');
6580 exports.Duplex = require('./lib/_stream_duplex.js');
6581 exports.Transform = require('./lib/_stream_transform.js');
6582 exports.PassThrough = require('./lib/_stream_passthrough.js');
6584 },{
"./lib/_stream_duplex.js":
16,
"./lib/_stream_passthrough.js":
17,
"./lib/_stream_readable.js":
18,
"./lib/_stream_transform.js":
19,
"./lib/_stream_writable.js":
20,
"stream":
26}],
24:[function(require,module,exports){
6585 module.exports = require(
"./lib/_stream_transform.js")
6587 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6588 module.exports = require(
"./lib/_stream_writable.js")
6590 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6591 // Copyright Joyent, Inc. and other Node contributors.
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:
6601 // The above copyright notice and this permission notice shall be included
6602 // in all copies or substantial portions of the Software.
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.
6612 module.exports = Stream;
6614 var EE = require('events').EventEmitter;
6615 var inherits = require('inherits');
6617 inherits(Stream, EE);
6618 Stream.Readable = require('readable-stream/readable.js');
6619 Stream.Writable = require('readable-stream/writable.js');
6620 Stream.Duplex = require('readable-stream/duplex.js');
6621 Stream.Transform = require('readable-stream/transform.js');
6622 Stream.PassThrough = require('readable-stream/passthrough.js');
6624 // Backwards-compat with node
0.4.x
6625 Stream.Stream = Stream;
6629 // old-style streams. Note that the pipe method (the only relevant
6630 // part of this class) is overridden in the Readable class.
6636 Stream.prototype.pipe = function(dest, options) {
6639 function ondata(chunk) {
6640 if (dest.writable) {
6641 if (false === dest.write(chunk) && source.pause) {
6647 source.on('data', ondata);
6649 function ondrain() {
6650 if (source.readable && source.resume) {
6655 dest.on('drain', ondrain);
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);
6664 var didOnEnd = false;
6666 if (didOnEnd) return;
6673 function onclose() {
6674 if (didOnEnd) return;
6677 if (typeof dest.destroy === 'function') dest.destroy();
6680 // don't leave dangling pipes when there are errors.
6681 function onerror(er) {
6683 if (EE.listenerCount(this, 'error') ===
0) {
6684 throw er; // Unhandled stream error in pipe.
6688 source.on('error', onerror);
6689 dest.on('error', onerror);
6691 // remove all the event listeners that were added.
6692 function cleanup() {
6693 source.removeListener('data', ondata);
6694 dest.removeListener('drain', ondrain);
6696 source.removeListener('end', onend);
6697 source.removeListener('close', onclose);
6699 source.removeListener('error', onerror);
6700 dest.removeListener('error', onerror);
6702 source.removeListener('end', cleanup);
6703 source.removeListener('close', cleanup);
6705 dest.removeListener('close', cleanup);
6708 source.on('end', cleanup);
6709 source.on('close', cleanup);
6711 dest.on('close', cleanup);
6713 dest.emit('pipe', source);
6715 // Allow for unix-like usage: A.pipe(B).pipe(C)
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.
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:
6730 // The above copyright notice and this permission notice shall be included
6731 // in all copies or substantial portions of the Software.
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.
6741 var Buffer = require('buffer').Buffer;
6743 var isBufferEncoding = Buffer.isEncoding
6744 || function(encoding) {
6745 switch (encoding && encoding.toLowerCase()) {
6746 case 'hex': case 'utf8': case 'utf-
8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-
2': case 'utf16le': case 'utf-
16le': case 'raw': return true;
6747 default: return false;
6752 function assertEncoding(encoding) {
6753 if (encoding && !isBufferEncoding(encoding)) {
6754 throw new Error('Unknown encoding: ' + encoding);
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.
6762 // @TODO Handling all encodings inside a single object makes it very difficult
6763 // to reason about this code, so it should be split up in the future.
6764 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
6765 // points as used by CESU-
8.
6766 var StringDecoder = exports.StringDecoder = function(encoding) {
6767 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6768 assertEncoding(encoding);
6769 switch (this.encoding) {
6771 // CESU-
8 represents each of Surrogate Pair by
3-bytes
6772 this.surrogateSize =
3;
6776 // UTF-
16 represents each of Surrogate Pair by
2-bytes
6777 this.surrogateSize =
2;
6778 this.detectIncompleteChar = utf16DetectIncompleteChar;
6781 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
6782 this.surrogateSize =
3;
6783 this.detectIncompleteChar = base64DetectIncompleteChar;
6786 this.write = passThroughWrite;
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;
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.
6805 // Note: Converting a Buffer containing an orphan surrogate to a String
6806 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6807 // Buffer#write) will replace incomplete surrogates with the unicode
6808 // replacement character. See https://codereview.chromium.org/
121173009/ .
6809 StringDecoder.prototype.write = function(buffer) {
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 :
6818 // add the new bytes to the char buffer
6819 buffer.copy(this.charBuffer, this.charReceived,
0, available);
6820 this.charReceived += available;
6822 if (this.charReceived < this.charLength) {
6823 // still not enough chars in this buffer? wait for more ...
6827 // remove bytes belonging to the current character from the buffer
6828 buffer = buffer.slice(available, buffer.length);
6830 // get the character that was split
6831 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
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;
6840 this.charReceived = this.charLength =
0;
6842 // if there are no more bytes in this buffer, just emit our char
6843 if (buffer.length ===
0) {
6849 // determine and set charLength / charReceived
6850 this.detectIncompleteChar(buffer);
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;
6859 charStr += buffer.toString(this.encoding,
0, end);
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);
6873 // or just emit the charStr
6877 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
6878 // the end of the given buffer. If so, it sets this.charLength to the byte
6879 // length that character, and sets this.charReceived to the number of bytes
6880 // that are available for this character.
6881 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6882 // determine how many bytes we have to check at the end of this buffer
6883 var i = (buffer.length
>=
3) ?
3 : buffer.length;
6885 // Figure out if one of the last i bytes of our buffer announces an
6887 for (; i
> 0; i--) {
6888 var c = buffer[buffer.length - i];
6890 // See http://en.wikipedia.org/wiki/UTF-
8#Description
6893 if (i ==
1 && c
>> 5 ==
0x06) {
6894 this.charLength =
2;
6899 if (i <=
2 && c
>> 4 ==
0x0E) {
6900 this.charLength =
3;
6905 if (i <=
3 && c
>> 3 ==
0x1E) {
6906 this.charLength =
4;
6910 this.charReceived = i;
6913 StringDecoder.prototype.end = function(buffer) {
6915 if (buffer && buffer.length)
6916 res = this.write(buffer);
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);
6928 function passThroughWrite(buffer) {
6929 return buffer.toString(this.encoding);
6932 function utf16DetectIncompleteChar(buffer) {
6933 this.charReceived = buffer.length %
2;
6934 this.charLength = this.charReceived ?
2 :
0;
6937 function base64DetectIncompleteChar(buffer) {
6938 this.charReceived = buffer.length %
3;
6939 this.charLength = this.charReceived ?
3 :
0;
6942 },{
"buffer":
7}],
28:[function(require,module,exports){
6943 module.exports = function isBuffer(arg) {
6944 return arg && typeof arg === 'object'
6945 && typeof arg.copy === 'function'
6946 && typeof arg.fill === 'function'
6947 && typeof arg.readUInt8 === 'function';
6949 },{}],
29:[function(require,module,exports){
6950 (function (process,global){
6951 // Copyright Joyent, Inc. and other Node contributors.
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:
6961 // The above copyright notice and this permission notice shall be included
6962 // in all copies or substantial portions of the Software.
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.
6972 var formatRegExp = /%[sdj%]/g;
6973 exports.format = function(f) {
6976 for (var i =
0; i < arguments.length; i++) {
6977 objects.push(inspect(arguments[i]));
6979 return objects.join(' ');
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;
6989 case '%s': return String(args[i++]);
6990 case '%d': return Number(args[i++]);
6993 return JSON.stringify(args[i++]);
6995 return '[Circular]';
7001 for (var x = args[i]; i < len; x = args[++i]) {
7002 if (isNull(x) || !isObject(x)) {
7005 str += ' ' + inspect(x);
7012 // Mark that a method should not be used.
7013 // Returns a modified function which warns once by default.
7014 // If --no-deprecation is set, then it is a no-op.
7015 exports.deprecate = function(fn, msg) {
7016 // Allow for deprecating things in the process of starting up.
7017 if (isUndefined(global.process)) {
7019 return exports.deprecate(fn, msg).apply(this, arguments);
7023 if (process.noDeprecation === true) {
7028 function deprecated() {
7030 if (process.throwDeprecation) {
7031 throw new Error(msg);
7032 } else if (process.traceDeprecation) {
7039 return fn.apply(this, arguments);
7048 exports.debuglog = function(set) {
7049 if (isUndefined(debugEnviron))
7050 debugEnviron = process.env.NODE_DEBUG || '';
7051 set = set.toUpperCase();
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);
7060 debugs[set] = function() {};
7068 * Echos the value of a value. Trys to print the value out
7069 * in the best way possible given the different types.
7071 * @param {Object} obj The object to print out.
7072 * @param {Object} opts Optional options object that alters the output.
7074 /* legacy: obj, showHidden, depth, colors*/
7075 function inspect(obj, opts) {
7079 stylize: stylizeNoColor
7082 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7083 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7084 if (isBoolean(opts)) {
7086 ctx.showHidden = opts;
7088 // got an "options" object
7089 exports._extend(ctx, opts);
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);
7099 exports.inspect = inspect;
7102 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7106 'underline' : [
4,
24],
7107 'inverse' : [
7,
27],
7114 'magenta' : [
35,
39],
7119 // Don't use 'blue' not visible on cmd.exe
7123 'boolean': 'yellow',
7124 'undefined': 'grey',
7128 // "name": intentionally not styling
7133 function stylizeWithColor(str, styleType) {
7134 var style = inspect.styles[styleType];
7137 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7138 '\u001b[' + inspect.colors[style][
1] + 'm';
7145 function stylizeNoColor(str, styleType) {
7150 function arrayToHash(array) {
7153 array.forEach(function(val, idx) {
7161 function formatValue(ctx, value, recurseTimes) {
7162 // Provide a hook for user-specified inspect functions.
7163 // Check that value is an object with an inspect function on it
7164 if (ctx.customInspect &&
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);
7178 // Primitive types cannot have properties
7179 var primitive = formatPrimitive(ctx, value);
7184 // Look up the keys of the object.
7185 var keys = Object.keys(value);
7186 var visibleKeys = arrayToHash(keys);
7188 if (ctx.showHidden) {
7189 keys = Object.getOwnPropertyNames(value);
7192 // IE doesn't make error fields non-enumerable
7193 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7195 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7196 return formatError(value);
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');
7205 if (isRegExp(value)) {
7206 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7208 if (isDate(value)) {
7209 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7211 if (isError(value)) {
7212 return formatError(value);
7216 var base = '', array = false, braces = ['{', '}'];
7218 // Make Array say that they are Array
7219 if (isArray(value)) {
7221 braces = ['[', ']'];
7224 // Make functions say that they are functions
7225 if (isFunction(value)) {
7226 var n = value.name ? ': ' + value.name : '';
7227 base = ' [Function' + n + ']';
7230 // Make RegExps say that they are RegExps
7231 if (isRegExp(value)) {
7232 base = ' ' + RegExp.prototype.toString.call(value);
7235 // Make dates with properties first say the date
7236 if (isDate(value)) {
7237 base = ' ' + Date.prototype.toUTCString.call(value);
7240 // Make error with message first say the error
7241 if (isError(value)) {
7242 base = ' ' + formatError(value);
7245 if (keys.length ===
0 && (!array || value.length ==
0)) {
7246 return braces[
0] + base + braces[
1];
7249 if (recurseTimes <
0) {
7250 if (isRegExp(value)) {
7251 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7253 return ctx.stylize('[Object]', 'special');
7257 ctx.seen.push(value);
7261 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7263 output = keys.map(function(key) {
7264 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7270 return reduceToSingleString(output, base, braces);
7274 function formatPrimitive(ctx, value) {
7275 if (isUndefined(value))
7276 return ctx.stylize('undefined', 'undefined');
7277 if (isString(value)) {
7278 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7279 .replace(/'/g, "\\'")
7280 .replace(/\\"/g, '"') + '\'';
7281 return ctx.stylize(simple, 'string');
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.
7289 return ctx.stylize('null', 'null');
7293 function formatError(value) {
7294 return '[' + Error.prototype.toString.call(value) + ']';
7298 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
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,
7308 keys.forEach(function(key) {
7309 if (!key.match(/^\d+$/)) {
7310 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7318 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7319 var name, str, desc;
7320 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7323 str = ctx.stylize('[Getter/Setter]', 'special');
7325 str = ctx.stylize('[Getter]', 'special');
7329 str = ctx.stylize('[Setter]', 'special');
7332 if (!hasOwnProperty(visibleKeys, key)) {
7333 name = '[' + key + ']';
7336 if (ctx.seen.indexOf(desc.value) <
0) {
7337 if (isNull(recurseTimes)) {
7338 str = formatValue(ctx, desc.value, null);
7340 str = formatValue(ctx, desc.value, recurseTimes -
1);
7342 if (str.indexOf('\n')
> -
1) {
7344 str = str.split('\n').map(function(line) {
7346 }).join('\n').substr(
2);
7348 str = '\n' + str.split('\n').map(function(line) {
7354 str = ctx.stylize('[Circular]', 'special');
7357 if (isUndefined(name)) {
7358 if (array && key.match(/^\d+$/)) {
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');
7366 name = name.replace(/'/g, "\\'")
7367 .replace(/\\"/g, '"')
7368 .replace(/(^"|"$)/g, "'");
7369 name = ctx.stylize(name, 'string');
7373 return name + ': ' + str;
7377 function reduceToSingleString(output, base, braces) {
7378 var numLinesEst =
0;
7379 var length = output.reduce(function(prev, cur) {
7381 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7382 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7387 (base === '' ? '' : base + '\n ') +
7389 output.join(',\n ') +
7394 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7398 // NOTE: These type checking functions intentionally don't use `instanceof`
7399 // because it is fragile and can be easily faked with `Object.create()`.
7400 function isArray(ar) {
7401 return Array.isArray(ar);
7403 exports.isArray = isArray;
7405 function isBoolean(arg) {
7406 return typeof arg === 'boolean';
7408 exports.isBoolean = isBoolean;
7410 function isNull(arg) {
7411 return arg === null;
7413 exports.isNull = isNull;
7415 function isNullOrUndefined(arg) {
7418 exports.isNullOrUndefined = isNullOrUndefined;
7420 function isNumber(arg) {
7421 return typeof arg === 'number';
7423 exports.isNumber = isNumber;
7425 function isString(arg) {
7426 return typeof arg === 'string';
7428 exports.isString = isString;
7430 function isSymbol(arg) {
7431 return typeof arg === 'symbol';
7433 exports.isSymbol = isSymbol;
7435 function isUndefined(arg) {
7436 return arg === void
0;
7438 exports.isUndefined = isUndefined;
7440 function isRegExp(re) {
7441 return isObject(re) && objectToString(re) === '[object RegExp]';
7443 exports.isRegExp = isRegExp;
7445 function isObject(arg) {
7446 return typeof arg === 'object' && arg !== null;
7448 exports.isObject = isObject;
7450 function isDate(d) {
7451 return isObject(d) && objectToString(d) === '[object Date]';
7453 exports.isDate = isDate;
7455 function isError(e) {
7456 return isObject(e) &&
7457 (objectToString(e) === '[object Error]' || e instanceof Error);
7459 exports.isError = isError;
7461 function isFunction(arg) {
7462 return typeof arg === 'function';
7464 exports.isFunction = isFunction;
7466 function isPrimitive(arg) {
7467 return arg === null ||
7468 typeof arg === 'boolean' ||
7469 typeof arg === 'number' ||
7470 typeof arg === 'string' ||
7471 typeof arg === 'symbol' || // ES6 symbol
7472 typeof arg === 'undefined';
7474 exports.isPrimitive = isPrimitive;
7476 exports.isBuffer = require('./support/isBuffer');
7478 function objectToString(o) {
7479 return Object.prototype.toString.call(o);
7484 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7488 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7489 'Oct', 'Nov', 'Dec'];
7492 function timestamp() {
7494 var time = [pad(d.getHours()),
7495 pad(d.getMinutes()),
7496 pad(d.getSeconds())].join(':');
7497 return [d.getDate(), months[d.getMonth()], time].join(' ');
7501 // log is just a thin wrapper to console.log that prepends a timestamp
7502 exports.log = function() {
7503 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7508 * Inherit the prototype methods from one constructor into another.
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).
7516 * @param {function} ctor Constructor function which needs to inherit the
7518 * @param {function} superCtor Constructor function to inherit prototype from.
7520 exports.inherits = require('inherits');
7522 exports._extend = function(origin, add) {
7523 // Don't do anything if add isn't an object
7524 if (!add || !isObject(add)) return origin;
7526 var keys = Object.keys(add);
7527 var i = keys.length;
7529 origin[keys[i]] = add[keys[i]];
7534 function hasOwnProperty(obj, prop) {
7535 return Object.prototype.hasOwnProperty.call(obj, prop);
7538 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7539 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7540 // Base58 encoding/decoding
7541 // Originally written by Mike Hearn for BitcoinJ
7542 // Copyright (c)
2011 Google Inc
7543 // Ported to JavaScript by Stefan Thomas
7544 // Merged Buffer refactorings from base58-native by Stephen Pair
7545 // Copyright (c)
2013 BitPay Inc
7547 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7548 var ALPHABET_MAP = {}
7549 for(var i =
0; i < ALPHABET.length; i++) {
7550 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7554 function encode(buffer) {
7555 if (buffer.length ===
0) return ''
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
7561 digits[
0] += buffer[i]
7564 for (j =
0; j < digits.length; ++j) {
7567 carry = (digits[j] / BASE) |
0
7572 digits.push(carry % BASE)
7574 carry = (carry / BASE) |
0
7578 // deal with leading zeros
7579 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
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]]
7589 function decode(string) {
7590 if (string.length ===
0) return []
7592 var i, j, bytes = [
0]
7593 for (i =
0; i < string.length; i++) {
7595 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7597 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7598 bytes[
0] += ALPHABET_MAP[c]
7601 for (j =
0; j < bytes.length; ++j) {
7604 carry = bytes[j]
>> 8
7609 bytes.push(carry &
0xff)
7615 // deal with leading zeros
7616 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7618 return bytes.reverse()
7626 },{}],
31:[function(require,module,exports){
7630 var base58 = require('bs58')
7631 var createHash = require('create-hash')
7633 // SHA256(SHA256(buffer))
7634 function sha256x2 (buffer) {
7635 buffer = createHash('sha256').update(buffer).digest()
7636 return createHash('sha256').update(buffer).digest()
7639 // Encode a buffer as a base58-check encoded string
7640 function encode (payload) {
7641 var checksum = sha256x2(payload).slice(
0,
4)
7643 return base58.encode(Buffer.concat([
7649 // Decode a base58-check encoded string to a buffer
7650 function decode (string) {
7651 var buffer = new Buffer(base58.decode(string))
7653 var payload = buffer.slice(
0, -
4)
7654 var checksum = buffer.slice(-
4)
7655 var newChecksum = sha256x2(payload).slice(
0,
4)
7657 for (var i =
0; i < newChecksum.length; ++i) {
7658 if (newChecksum[i] === checksum[i]) continue
7660 throw new Error('Invalid checksum')
7671 }).call(this,require("buffer").Buffer)
7672 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7675 var inherits = require('inherits')
7676 var md5 = require('./md5')
7677 var rmd160 = require('ripemd160')
7678 var sha = require('sha.js')
7680 var Transform = require('stream').Transform
7682 function HashNoConstructor(hash) {
7683 Transform.call(this)
7689 inherits(HashNoConstructor, Transform)
7691 HashNoConstructor.prototype._transform = function (data, _, next) {
7692 this.buffers.push(data)
7697 HashNoConstructor.prototype._flush = function (next) {
7698 this.push(this.digest())
7702 HashNoConstructor.prototype.update = function (data, enc) {
7703 if (typeof data === 'string') {
7704 data = new Buffer(data, enc)
7707 this.buffers.push(data)
7711 HashNoConstructor.prototype.digest = function (enc) {
7712 var buf = Buffer.concat(this.buffers)
7713 var r = this._hash(buf)
7716 return enc ? r.toString(enc) : r
7719 function Hash(hash) {
7720 Transform.call(this)
7725 inherits(Hash, Transform)
7727 Hash.prototype._transform = function (data, enc, next) {
7728 if (enc) data = new Buffer(data, enc)
7730 this._hash.update(data)
7735 Hash.prototype._flush = function (next) {
7736 this.push(this._hash.digest())
7742 Hash.prototype.update = function (data, enc) {
7743 if (typeof data === 'string') {
7744 data = new Buffer(data, enc)
7747 this._hash.update(data)
7751 Hash.prototype.digest = function (enc) {
7752 var outData = this._hash.digest()
7754 return enc ? outData.toString(enc) : outData
7757 module.exports = function createHash (alg) {
7758 if ('md5' === alg) return new HashNoConstructor(md5)
7759 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7761 return new Hash(sha(alg))
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){
7769 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
7772 function toArray(buf, bigEndian) {
7773 if ((buf.length % intSize) !==
0) {
7774 var len = buf.length + (intSize - (buf.length % intSize));
7775 buf = Buffer.concat([buf, zeroBuffer], len);
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));
7786 function toBuffer(arr, size, bigEndian) {
7787 var buf = new Buffer(size);
7788 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7789 for (var i =
0; i < arr.length; i++) {
7790 fn.call(buf, arr[i], i *
4, true);
7795 function hash(buf, fn, hashSize, bigEndian) {
7796 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7797 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7798 return toBuffer(arr, hashSize, bigEndian);
7800 exports.hash = hash;
7801 }).call(this,require("buffer").Buffer)
7802 },{"buffer":
7}],
34:[function(require,module,exports){
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.
7813 var helpers = require('./helpers');
7816 * Calculate the MD5 of an array of little-endian words, and a bit length
7818 function core_md5(x, len)
7820 /* append padding */
7821 x[len
>> 5] |=
0x80 << ((len) %
32);
7822 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
7826 var c = -
1732584194;
7829 for(var i =
0; i < x.length; i +=
16)
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);
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);
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);
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);
7904 a = safe_add(a, olda);
7905 b = safe_add(b, oldb);
7906 c = safe_add(c, oldc);
7907 d = safe_add(d, oldd);
7909 return Array(a, b, c, d);
7914 * These functions implement the four basic operations the algorithm uses.
7916 function md5_cmn(q, a, b, x, s, t)
7918 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7920 function md5_ff(a, b, c, d, x, s, t)
7922 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7924 function md5_gg(a, b, c, d, x, s, t)
7926 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7928 function md5_hh(a, b, c, d, x, s, t)
7930 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7932 function md5_ii(a, b, c, d, x, s, t)
7934 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7938 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
7939 * to work around bugs in some JS interpreters.
7941 function safe_add(x, y)
7943 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
7944 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
7945 return (msw <<
16) | (lsw &
0xFFFF);
7949 * Bitwise rotate a
32-bit number to the left.
7951 function bit_rol(num, cnt)
7953 return (num << cnt) | (num
>>> (
32 - cnt));
7956 module.exports = function md5(buf) {
7957 return helpers.hash(buf, core_md5,
16);
7959 },{"./helpers":
33}],
35:[function(require,module,exports){
7960 arguments[
4][
12][
0].apply(exports,arguments)
7961 },{"dup":
12}],
36:[function(require,module,exports){
7965 code.google.com/p/crypto-js
7966 (c)
2009-
2013 by Jeff Mott. All rights reserved.
7967 code.google.com/p/crypto-js/wiki/License
7970 (c)
2012 by Cédric Mesnil. All rights reserved.
7972 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
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.
7977 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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
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
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
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
8013 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8014 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8016 function bytesToWords (bytes) {
8018 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8019 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8024 function wordsToBytes (words) {
8026 for (var b =
0; b < words.length *
32; b +=
8) {
8027 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8032 function processBlock (H, M, offset) {
8034 for (var i =
0; i <
16; i++) {
8035 var offset_i = offset + i
8036 var M_offset_i = M[offset_i]
8040 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8041 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8045 // Working variables
8046 var al, bl, cl, dl, el
8047 var ar, br, cr, dr, er
8057 for (i =
0; i <
80; i +=
1) {
8058 t = (al + M[offset + zl[i]]) |
0
8060 t += f1(bl, cl, dl) + hl[
0]
8061 } else if (i <
32) {
8062 t += f2(bl, cl, dl) + hl[
1]
8063 } else if (i <
48) {
8064 t += f3(bl, cl, dl) + hl[
2]
8065 } else if (i <
64) {
8066 t += f4(bl, cl, dl) + hl[
3]
8067 } else {// if (i
<80) {
8068 t += f5(bl, cl, dl) + hl[
4]
8079 t = (ar + M[offset + zr[i]]) |
0
8081 t += f5(br, cr, dr) + hr[
0]
8082 } else if (i <
32) {
8083 t += f4(br, cr, dr) + hr[
1]
8084 } else if (i <
48) {
8085 t += f3(br, cr, dr) + hr[
2]
8086 } else if (i <
64) {
8087 t += f2(br, cr, dr) + hr[
3]
8088 } else {// if (i
<80) {
8089 t += f1(br, cr, dr) + hr[
4]
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
8111 function f1 (x, y, z) {
8112 return ((x) ^ (y) ^ (z))
8115 function f2 (x, y, z) {
8116 return (((x) & (y)) | ((~x) & (z)))
8119 function f3 (x, y, z) {
8120 return (((x) | (~(y))) ^ (z))
8123 function f4 (x, y, z) {
8124 return (((x) & (z)) | ((y) & (~(z))))
8127 function f5 (x, y, z) {
8128 return ((x) ^ ((y) | (~(z))))
8131 function rotl (x, n) {
8132 return (x << n) | (x
>>> (
32 - n))
8135 function ripemd160 (message) {
8136 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8138 if (typeof message === 'string') {
8139 message = new Buffer(message, 'utf8')
8142 var m = bytesToWords(message)
8144 var nBitsLeft = message.length *
8
8145 var nBitsTotal = message.length *
8
8148 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8149 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8150 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8151 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8154 for (var i =
0; i < m.length; i +=
16) {
8155 processBlock(H, m, i)
8159 for (i =
0; i <
5; i++) {
8164 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8165 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8168 var digestbytes = wordsToBytes(H)
8169 return new Buffer(digestbytes)
8172 module.exports = ripemd160
8174 }).call(this,require(
"buffer").Buffer)
8175 },{
"buffer":
7}],
37:[function(require,module,exports){
8177 // prototype class for hash functions
8178 function Hash (blockSize, finalSize) {
8179 this._block = new Buffer(blockSize)
8180 this._finalSize = finalSize
8181 this._blockSize = blockSize
8186 Hash.prototype.update = function (data, enc) {
8187 if (typeof data === 'string') {
8189 data = new Buffer(data, enc)
8192 var l = this._len += data.length
8193 var s = this._s ||
0
8195 var buffer = this._block
8198 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8201 for (var i =
0; i < ch; i++) {
8202 buffer[(s % this._blockSize) + i] = data[i + f]
8208 if ((s % this._blockSize) ===
0) {
8209 this._update(buffer)
8217 Hash.prototype.digest = function (enc) {
8218 // Suppose the length of the message M, in bits, is l
8219 var l = this._len *
8
8221 // Append the bit
1 to the end of the message
8222 this._block[this._len % this._blockSize] =
0x80
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)
8227 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8228 this._update(this._block)
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)
8236 var hash = this._update(this._block) || this._hash()
8238 return enc ? hash.toString(enc) : hash
8241 Hash.prototype._update = function () {
8242 throw new Error('_update must be implemented by subclass')
8245 module.exports = Hash
8247 }).call(this,require("buffer").Buffer)
8248 },{"buffer":
7}],
38:[function(require,module,exports){
8249 var exports = module.exports = function SHA (algorithm) {
8250 algorithm = algorithm.toLowerCase()
8252 var Algorithm = exports[algorithm]
8253 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8255 return new Algorithm()
8258 exports.sha = require('./sha')
8259 exports.sha1 = require('./sha1')
8260 exports.sha224 = require('./sha224')
8261 exports.sha256 = require('./sha256')
8262 exports.sha384 = require('./sha384')
8263 exports.sha512 = require('./sha512')
8265 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8268 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
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.
8275 var inherits = require('inherits')
8276 var Hash = require('./hash')
8278 var W = new Array(
80)
8284 Hash.call(this,
64,
56)
8289 Sha.prototype.init = function () {
8290 this._a =
0x67452301 |
0
8291 this._b =
0xefcdab89 |
0
8292 this._c =
0x98badcfe |
0
8293 this._d =
0x10325476 |
0
8294 this._e =
0xc3d2e1f0 |
0
8300 * Bitwise rotate a
32-bit number to the left.
8302 function rol (num, cnt) {
8303 return (num << cnt) | (num
>>> (
32 - cnt))
8306 Sha.prototype._update = function (M) {
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) }
8321 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8322 function loop (w, f) {
8325 var t = rol(a,
5) + f + e + w + k
8336 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8337 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8339 while (j <
40) loop(calcW(), b ^ c ^ d)
8341 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8343 while (j <
80) loop(calcW(), b ^ c ^ d)
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
8352 Sha.prototype._hash = function () {
8353 var H = new Buffer(
20)
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)
8364 module.exports = Sha
8367 }).call(this,require("buffer").Buffer)
8368 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8371 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
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.
8379 var inherits = require('inherits')
8380 var Hash = require('./hash')
8382 var W = new Array(
80)
8388 Hash.call(this,
64,
56)
8391 inherits(Sha1, Hash)
8393 Sha1.prototype.init = function () {
8394 this._a =
0x67452301 |
0
8395 this._b =
0xefcdab89 |
0
8396 this._c =
0x98badcfe |
0
8397 this._d =
0x10325476 |
0
8398 this._e =
0xc3d2e1f0 |
0
8404 * Bitwise rotate a
32-bit number to the left.
8406 function rol (num, cnt) {
8407 return (num << cnt) | (num
>>> (
32 - cnt))
8410 Sha1.prototype._update = function (M) {
8421 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8422 function loop (w, f) {
8425 var t = rol(a,
5) + f + e + w + k
8436 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8437 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8439 while (j <
40) loop(calcW(), b ^ c ^ d)
8441 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8443 while (j <
80) loop(calcW(), b ^ c ^ d)
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
8452 Sha1.prototype._hash = function () {
8453 var H = new Buffer(
20)
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)
8464 module.exports = Sha1
8466 }).call(this,require("buffer").Buffer)
8467 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8470 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8472 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8473 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8477 var inherits = require('inherits')
8478 var Sha256 = require('./sha256')
8479 var Hash = require('./hash')
8481 var W = new Array(
64)
8483 function Sha224 () {
8486 this._w = W // new Array(
64)
8488 Hash.call(this,
64,
56)
8491 inherits(Sha224, Sha256)
8493 Sha224.prototype.init = function () {
8494 this._a =
0xc1059ed8 |
0
8495 this._b =
0x367cd507 |
0
8496 this._c =
0x3070dd17 |
0
8497 this._d =
0xf70e5939 |
0
8498 this._e =
0xffc00b31 |
0
8499 this._f =
0x68581511 |
0
8500 this._g =
0x64f98fa7 |
0
8501 this._h =
0xbefa4fa4 |
0
8506 Sha224.prototype._hash = function () {
8507 var H = new Buffer(
28)
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)
8520 module.exports = Sha224
8522 }).call(this,require("buffer").Buffer)
8523 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8526 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8528 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8529 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8533 var inherits = require('inherits')
8534 var Hash = require('./hash')
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
8555 var W = new Array(
64)
8557 function Sha256 () {
8560 this._w = W // new Array(
64)
8562 Hash.call(this,
64,
56)
8565 inherits(Sha256, Hash)
8567 Sha256.prototype.init = function () {
8568 this._a =
0x6a09e667 |
0
8569 this._b =
0xbb67ae85 |
0
8570 this._c =
0x3c6ef372 |
0
8571 this._d =
0xa54ff53a |
0
8572 this._e =
0x510e527f |
0
8573 this._f =
0x9b05688c |
0
8574 this._g =
0x1f83d9ab |
0
8575 this._h =
0x5be0cd19 |
0
8581 return (X
>>> n) | (X << (
32 - n))
8588 function Ch (x, y, z) {
8589 return ((x & y) ^ ((~x) & z))
8592 function Maj (x, y, z) {
8593 return ((x & y) ^ (x & z) ^ (y & z))
8596 function Sigma0256 (x) {
8597 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8600 function Sigma1256 (x) {
8601 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8604 function Gamma0256 (x) {
8605 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8608 function Gamma1256 (x) {
8609 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8612 Sha256.prototype._update = function (M) {
8626 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8630 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8631 var T2 = Sigma0256(a) + Maj(a, b, c)
8645 while (j <
16) loop(M.readInt32BE(j *
4))
8646 while (j <
64) loop(calcW())
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
8658 Sha256.prototype._hash = function () {
8659 var H = new Buffer(
32)
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)
8673 module.exports = Sha256
8675 }).call(this,require("buffer").Buffer)
8676 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8678 var inherits = require('inherits')
8679 var SHA512 = require('./sha512')
8680 var Hash = require('./hash')
8682 var W = new Array(
160)
8684 function Sha384 () {
8688 Hash.call(this,
128,
112)
8691 inherits(Sha384, SHA512)
8693 Sha384.prototype.init = function () {
8694 this._a =
0xcbbb9d5d |
0
8695 this._b =
0x629a292a |
0
8696 this._c =
0x9159015a |
0
8697 this._d =
0x152fecd8 |
0
8698 this._e =
0x67332667 |
0
8699 this._f =
0x8eb44a87 |
0
8700 this._g =
0xdb0c2e0d |
0
8701 this._h =
0x47b5481d |
0
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
8715 Sha384.prototype._hash = function () {
8716 var H = new Buffer(
48)
8718 function writeInt64BE (h, l, offset) {
8719 H.writeInt32BE(h, offset)
8720 H.writeInt32BE(l, offset +
4)
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)
8733 module.exports = Sha384
8735 }).call(this,require("buffer").Buffer)
8736 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8738 var inherits = require('inherits')
8739 var Hash = require('./hash')
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
8784 var W = new Array(
160)
8786 function Sha512 () {
8790 Hash.call(this,
128,
112)
8793 inherits(Sha512, Hash)
8795 Sha512.prototype.init = function () {
8796 this._a =
0x6a09e667 |
0
8797 this._b =
0xbb67ae85 |
0
8798 this._c =
0x3c6ef372 |
0
8799 this._d =
0xa54ff53a |
0
8800 this._e =
0x510e527f |
0
8801 this._f =
0x9b05688c |
0
8802 this._g =
0x1f83d9ab |
0
8803 this._h =
0x5be0cd19 |
0
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
8817 function S (X, Xl, n) {
8818 return (X
>>> n) | (Xl << (
32 - n))
8821 function Ch (x, y, z) {
8822 return ((x & y) ^ ((~x) & z))
8825 function Maj (x, y, z) {
8826 return ((x & y) ^ (x & z) ^ (y & z))
8829 Sha512.prototype._update = function (M) {
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
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)
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)
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]
8867 var Wi16 = W[j -
16 *
2]
8868 var Wi16l = W[j -
16 *
2 +
1]
8870 Wil = gamma0l + Wi7l
8871 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
8873 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
8875 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
8882 var maj = Maj(a, b, c)
8883 var majl = Maj(al, bl, cl)
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)
8890 // t1 = h + sigma1 + ch + K[i] + W[i]
8894 var ch = Ch(e, f, g)
8895 var chl = Ch(el, fl, gl)
8897 var t1l = hl + sigma1l
8898 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
8900 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
8902 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
8904 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
8906 // t2 = sigma0 + maj
8907 var t2l = sigma0l + majl
8908 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
8917 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8924 al = (t1l + t2l) |
0
8925 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
8932 Wi = M.readInt32BE(j *
4)
8933 Wil = M.readInt32BE(j *
4 +
4)
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
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
8962 Sha512.prototype._hash = function () {
8963 var H = new Buffer(
64)
8965 function writeInt64BE (h, l, offset) {
8966 H.writeInt32BE(h, offset)
8967 H.writeInt32BE(l, offset +
4)
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)
8982 module.exports = Sha512
8984 }).call(this,require(
"buffer").Buffer)
8985 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
8988 var createHash = require('create-hash/browser');
8989 var inherits = require('inherits')
8991 var Transform = require('stream').Transform
8993 var ZEROS = new Buffer(
128)
8996 function Hmac(alg, key) {
8997 Transform.call(this)
8999 if (typeof key === 'string') {
9000 key = new Buffer(key)
9003 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9008 if (key.length
> blocksize) {
9009 key = createHash(alg).update(key).digest()
9011 } else if (key.length < blocksize) {
9012 key = Buffer.concat([key, ZEROS], blocksize)
9015 var ipad = this._ipad = new Buffer(blocksize)
9016 var opad = this._opad = new Buffer(blocksize)
9018 for (var i =
0; i < blocksize; i++) {
9019 ipad[i] = key[i] ^
0x36
9020 opad[i] = key[i] ^
0x5C
9023 this._hash = createHash(alg).update(ipad)
9026 inherits(Hmac, Transform)
9028 Hmac.prototype.update = function (data, enc) {
9029 this._hash.update(data, enc)
9034 Hmac.prototype._transform = function (data, _, next) {
9035 this._hash.update(data)
9040 Hmac.prototype._flush = function (next) {
9041 this.push(this.digest())
9046 Hmac.prototype.digest = function (enc) {
9047 var h = this._hash.digest()
9049 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9052 module.exports = function createHmac(alg, key) {
9053 return new Hmac(alg, key)
9056 }).call(this,require("buffer").Buffer)
9057 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9058 arguments[
4][
12][
0].apply(exports,arguments)
9059 },{"dup":
12}],
47:[function(require,module,exports){
9060 var assert = require('assert')
9061 var BigInteger = require('bigi')
9063 var Point = require('./point')
9065 function Curve(p, a, b, Gx, Gy, n, h) {
9069 this.G = Point.fromAffine(this, Gx, Gy)
9073 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9076 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9079 Curve.prototype.pointFromX = function(isOdd, x) {
9080 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9081 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9084 if (beta.isEven() ^ !isOdd) {
9085 y = this.p.subtract(y) // -y % p
9088 return Point.fromAffine(this, x, y)
9091 Curve.prototype.isInfinity = function(Q) {
9092 if (Q === this.infinity) return true
9094 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9097 Curve.prototype.isOnCurve = function(Q) {
9098 if (this.isInfinity(Q)) return true
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
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)
9117 * Validate an elliptic curve point.
9119 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9121 Curve.prototype.validate = function(Q) {
9123 assert(!this.isInfinity(Q), 'Point is at infinity')
9124 assert(this.isOnCurve(Q), 'Point is not on the curve')
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')
9133 module.exports = Curve
9135 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9138 "p": "fffffffdffffffffffffffffffffffff",
9139 "a": "fffffffdfffffffffffffffffffffffc",
9140 "b": "e87579c11079f43dd824993c2cee5ed3",
9141 "n": "fffffffe0000000075a30d1b9038a115",
9143 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9144 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9147 "p": "fffffffffffffffffffffffffffffffeffffac73",
9150 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9152 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9153 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9156 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9157 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9158 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9159 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9161 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9162 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9165 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9168 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9170 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9171 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9174 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9175 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9176 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9177 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9179 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9180 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9183 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9186 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9188 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9189 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9192 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9193 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9194 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9195 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9197 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9198 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9202 },{}],
49:[function(require,module,exports){
9203 var Point = require('./point')
9204 var Curve = require('./curve')
9206 var getCurveByName = require('./names')
9211 getCurveByName: getCurveByName
9214 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9215 var BigInteger = require('bigi')
9217 var curves = require('./curves')
9218 var Curve = require('./curve')
9220 function getCurveByName(name) {
9221 var curve = curves[name]
9222 if (!curve) return null
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)
9232 return new Curve(p, a, b, Gx, Gy, n, h)
9235 module.exports = getCurveByName
9237 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9239 var assert = require('assert')
9240 var BigInteger = require('bigi')
9242 var THREE = BigInteger.valueOf(
3)
9244 function Point(curve, x, y, z) {
9245 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9253 this.compressed = true
9256 Object.defineProperty(Point.prototype, 'zInv', {
9258 if (this._zInv === null) {
9259 this._zInv = this.z.modInverse(this.curve.p)
9266 Object.defineProperty(Point.prototype, 'affineX', {
9268 return this.x.multiply(this.zInv).mod(this.curve.p)
9272 Object.defineProperty(Point.prototype, 'affineY', {
9274 return this.y.multiply(this.zInv).mod(this.curve.p)
9278 Point.fromAffine = function(curve, x, y) {
9279 return new Point(curve, x, y, BigInteger.ONE)
9282 Point.prototype.equals = function(other) {
9283 if (other === this) return true
9284 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9285 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9287 // u = Y2 * Z1 - Y1 * Z2
9288 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9290 if (u.signum() !==
0) return false
9292 // v = X2 * Z1 - X1 * Z2
9293 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9295 return v.signum() ===
0
9298 Point.prototype.negate = function() {
9299 var y = this.curve.p.subtract(this.y)
9301 return new Point(this.curve, this.x, y, this.z)
9304 Point.prototype.add = function(b) {
9305 if (this.curve.isInfinity(this)) return b
9306 if (this.curve.isInfinity(b)) return this
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)
9318 if (v.signum() ===
0) {
9319 if (u.signum() ===
0) {
9320 return this.twice() // this == b, so double
9323 return this.curve.infinity // this = -b, so infinity
9327 var v3 = v2.multiply(v)
9328 var x1v2 = x1.multiply(v2)
9329 var zu2 = u.square().multiply(this.z)
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)
9338 return new Point(this.curve, x3, y3, z3)
9341 Point.prototype.twice = function() {
9342 if (this.curve.isInfinity(this)) return this
9343 if (this.y.signum() ===
0) return this.curve.infinity
9348 var y1z1 = y1.multiply(this.z)
9349 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9350 var a = this.curve.a
9352 // w =
3 * x1^
2 + a * z1^
2
9353 var w = x1.square().multiply(THREE)
9355 if (a.signum() !==
0) {
9356 w = w.add(this.z.square().multiply(a))
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)
9367 return new Point(this.curve, x3, y3, z3)
9370 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9371 // TODO: modularize the multiplication algorithm
9372 Point.prototype.multiply = function(k) {
9373 if (this.curve.isInfinity(this)) return this
9374 if (k.signum() ===
0) return this.curve.infinity
9377 var h = e.multiply(THREE)
9379 var neg = this.negate()
9382 for (var i = h.bitLength() -
2; i
> 0; --i) {
9385 var hBit = h.testBit(i)
9386 var eBit = e.testBit(i)
9389 R = R.add(hBit ? this : neg)
9396 // Compute this*j + x*k (simultaneous multiplication)
9397 Point.prototype.multiplyTwo = function(j, x, k) {
9400 if (j.bitLength()
> k.bitLength())
9401 i = j.bitLength() -
1
9403 i = k.bitLength() -
1
9405 var R = this.curve.infinity
9406 var both = this.add(x)
9411 var jBit = j.testBit(i)
9412 var kBit = k.testBit(i)
9433 Point.prototype.getEncoded = function(compressed) {
9434 if (compressed == undefined) compressed = this.compressed
9435 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9437 var x = this.affineX
9438 var y = this.affineY
9442 // Determine size of q in bytes
9443 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9447 buffer = new Buffer(
1 + byteLength)
9448 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9452 buffer = new Buffer(
1 + byteLength + byteLength)
9453 buffer.writeUInt8(
0x04,
0)
9455 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9458 x.toBuffer(byteLength).copy(buffer,
1)
9463 Point.decodeFrom = function(curve, buffer) {
9464 var type = buffer.readUInt8(
0)
9465 var compressed = (type !==
4)
9467 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9468 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9472 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9473 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9475 var isOdd = (type ===
0x03)
9476 Q = curve.pointFromX(isOdd, x)
9479 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9481 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9482 Q = Point.fromAffine(curve, x, y)
9485 Q.compressed = compressed
9489 Point.prototype.toString = function () {
9490 if (this.curve.isInfinity(this)) return '(INFINITY)'
9492 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9495 module.exports = Point
9497 }).call(this,require("buffer").Buffer)
9498 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9499 (function (process,global,Buffer){
9502 var crypto = global.crypto || global.msCrypto
9503 if(crypto && crypto.getRandomValues) {
9504 module.exports = randomBytes;
9506 module.exports = oldBrowser;
9508 function randomBytes(size, cb) {
9509 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9510 /* This will not work in older browsers.
9511 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9514 crypto.getRandomValues(bytes);
9515 if (typeof cb === 'function') {
9516 return process.nextTick(function () {
9522 function oldBrowser() {
9524 'secure random number generation not supported by this browser\n'+
9525 'use chrome, FireFox or Internet Explorer
11'
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){
9534 function getFunctionName(fn) {
9535 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9538 function getTypeTypeName(type) {
9539 if (nativeTypes.Function(type)) {
9540 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9542 if (nativeTypes.Object(type)) return JSON.stringify(type);
9547 function getValueTypeName(value) {
9548 if (nativeTypes.Null(value)) return '';
9550 return getFunctionName(value.constructor);
9553 function tfErrorString(type, value) {
9554 var typeTypeName = getTypeTypeName(type);
9555 var valueTypeName = getValueTypeName(value);
9557 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9560 function tfPropertyErrorString(type, name, value) {
9561 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9565 Array: (function (_Array) {
9566 function Array(_x) {
9567 return _Array.apply(this, arguments);
9570 Array.toString = function () {
9571 return _Array.toString();
9575 })(function (value) {
9576 return value !== null && value !== undefined && value.constructor === Array;
9578 Boolean: function Boolean(value) {
9579 return typeof value === 'boolean';
9581 Buffer: (function (_Buffer) {
9582 function Buffer(_x2) {
9583 return _Buffer.apply(this, arguments);
9586 Buffer.toString = function () {
9587 return _Buffer.toString();
9591 })(function (value) {
9592 return Buffer.isBuffer(value);
9594 Function: function Function(value) {
9595 return typeof value === 'function';
9597 Null: function Null(value) {
9598 return value === undefined || value === null;
9600 Number: function Number(value) {
9601 return typeof value === 'number';
9603 Object: function Object(value) {
9604 return typeof value === 'object';
9606 String: function String(value) {
9607 return typeof value === 'string';
9614 function tJSON(type) {
9615 return type && type.toJSON ? type.toJSON() : type;
9618 function sJSON(type) {
9619 var json = tJSON(type);
9620 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9624 arrayOf: function arrayOf(type) {
9625 function arrayOf(value, strict) {
9627 return nativeTypes.Array(value) && value.every(function (x) {
9628 return typeforce(type, x, strict);
9634 arrayOf.toJSON = function () {
9635 return [tJSON(type)];
9641 maybe: function maybe(type) {
9642 function maybe(value, strict) {
9643 return nativeTypes.Null(value) || typeforce(type, value, strict);
9645 maybe.toJSON = function () {
9646 return '?' + sJSON(type);
9652 object: function object(type) {
9653 function object(value, strict) {
9654 typeforce(nativeTypes.Object, value, strict);
9656 var propertyName, propertyType, propertyValue;
9659 for (propertyName in type) {
9660 propertyType = type[propertyName];
9661 propertyValue = value[propertyName];
9663 typeforce(propertyType, propertyValue, strict);
9666 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9670 for (propertyName in value) {
9671 if (type[propertyName]) continue;
9673 throw new TypeError('Unexpected property "' + propertyName + '"');
9679 object.toJSON = function () {
9686 oneOf: function oneOf() {
9687 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9688 types[_key] = arguments[_key];
9691 function oneOf(value, strict) {
9692 return types.some(function (type) {
9694 return typeforce(type, value, strict);
9700 oneOf.toJSON = function () {
9701 return types.map(sJSON).join('|');
9707 quacksLike: function quacksLike(type) {
9708 function quacksLike(value, strict) {
9709 return type === getValueTypeName(value);
9711 quacksLike.toJSON = function () {
9718 tuple: function tuple() {
9719 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9720 types[_key2] = arguments[_key2];
9723 function tuple(value, strict) {
9724 return types.every(function (type, i) {
9725 return typeforce(type, value[i], strict);
9728 tuple.toJSON = function () {
9729 return '(' + types.map(sJSON).join(', ') + ')';
9735 value: function value(expected) {
9736 function value(actual) {
9737 return actual === expected;
9739 value.toJSON = function () {
9747 function compile(type) {
9748 if (nativeTypes.String(type)) {
9749 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
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]));
9757 for (var propertyName in type) {
9758 compiled[propertyName] = compile(type[propertyName]);
9761 return otherTypes.object(compiled);
9762 } else if (nativeTypes.Function(type)) {
9766 return otherTypes.value(type);
9769 function typeforce(_x3, _x4, _x5) {
9772 _function: while (_again) {
9778 if (nativeTypes.Function(type)) {
9779 if (type(value, strict)) return true;
9781 throw new TypeError(tfErrorString(type, value));
9785 _x3 = compile(type);
9793 // assign all types to typeforce function
9795 Object.keys(nativeTypes).forEach(function (typeName) {
9796 var nativeType = nativeTypes[typeName];
9797 nativeType.toJSON = function () {
9801 typeforce[typeName] = nativeType;
9804 for (typeName in otherTypes) {
9805 typeforce[typeName] = otherTypes[typeName];
9808 module.exports = typeforce;
9809 module.exports.compile = compile;
9810 }).call(this,require("buffer").Buffer)
9811 },{"buffer":
7}],
54:[function(require,module,exports){
9813 var assert = require('assert')
9814 var base58check = require('bs58check')
9815 var typeForce = require('typeforce')
9816 var networks = require('./networks')
9817 var scripts = require('./scripts')
9819 function findScriptTypeByVersion (version) {
9820 for (var networkName in networks) {
9821 var network = networks[networkName]
9823 if (version === network.pubKeyHash) return 'pubkeyhash'
9824 if (version === network.scriptHash) return 'scripthash'
9828 function Address (hash, version) {
9829 typeForce('Buffer', hash)
9831 assert.strictEqual(hash.length,
20, 'Invalid hash length')
9832 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
9835 this.version = version
9838 Address.fromBase58Check = function (string) {
9839 var payload = base58check.decode(string)
9840 var version = payload.readUInt8(
0)
9841 var hash = payload.slice(
1)
9843 return new Address(hash, version)
9846 Address.fromOutputScript = function (script, network) {
9847 network = network || networks.bitcoin
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)
9852 assert(false, script.toASM() + ' has no matching Address')
9855 Address.prototype.toBase58Check = function () {
9856 var payload = new Buffer(
21)
9857 payload.writeUInt8(this.version,
0)
9858 this.hash.copy(payload,
1)
9860 return base58check.encode(payload)
9863 Address.prototype.toOutputScript = function () {
9864 var scriptType = findScriptTypeByVersion(this.version)
9866 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9867 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9869 assert(false, this.toString() + ' has no matching Script')
9872 Address.prototype.toString = Address.prototype.toBase58Check
9874 module.exports = Address
9876 }).call(this,require("buffer").Buffer)
9877 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
9878 var bs58check = require('bs58check')
9880 function decode () {
9881 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9883 return bs58check.decode.apply(undefined, arguments)
9886 function encode () {
9887 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9889 return bs58check.encode.apply(undefined, arguments)
9897 },{"bs58check":
31}],
56:[function(require,module,exports){
9899 var assert = require('assert')
9900 var bufferutils = require('./bufferutils')
9901 var crypto = require('./crypto')
9903 var Transaction = require('./transaction')
9907 this.prevHash = null
9908 this.merkleRoot = null
9914 Block.fromBuffer = function (buffer) {
9915 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
9918 function readSlice (n) {
9920 return buffer.slice(offset - n, offset)
9923 function readUInt32 () {
9924 var i = buffer.readUInt32LE(offset)
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()
9937 if (buffer.length ===
80) return block
9939 function readVarInt () {
9940 var vi = bufferutils.readVarInt(buffer, offset)
9945 // FIXME: poor performance
9946 function readTransaction () {
9947 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9949 offset += tx.toBuffer().length
9953 var nTransactions = readVarInt()
9954 block.transactions = []
9956 for (var i =
0; i < nTransactions; ++i) {
9957 var tx = readTransaction()
9958 block.transactions.push(tx)
9964 Block.fromHex = function (hex) {
9965 return Block.fromBuffer(new Buffer(hex, 'hex'))
9968 Block.prototype.getHash = function () {
9969 return crypto.hash256(this.toBuffer(true))
9972 Block.prototype.getId = function () {
9973 return bufferutils.reverse(this.getHash()).toString('hex')
9976 Block.prototype.getUTCDate = function () {
9977 var date = new Date(
0) // epoch
9978 date.setUTCSeconds(this.timestamp)
9983 Block.prototype.toBuffer = function (headersOnly) {
9984 var buffer = new Buffer(
80)
9987 function writeSlice (slice) {
9988 slice.copy(buffer, offset)
9989 offset += slice.length
9992 function writeUInt32 (i) {
9993 buffer.writeUInt32LE(i, offset)
9997 writeUInt32(this.version)
9998 writeSlice(this.prevHash)
9999 writeSlice(this.merkleRoot)
10000 writeUInt32(this.timestamp)
10001 writeUInt32(this.bits)
10002 writeUInt32(this.nonce)
10004 if (headersOnly || !this.transactions) return buffer
10006 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10007 var txBuffers = this.transactions.map(function (tx) {
10008 return tx.toBuffer()
10011 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10014 Block.prototype.toHex = function (headersOnly) {
10015 return this.toBuffer(headersOnly).toString('hex')
10018 module.exports = Block
10020 }).call(this,require("buffer").Buffer)
10021 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10022 (function (Buffer){
10023 var assert = require('assert')
10024 var opcodes = require('./opcodes')
10026 // https://github.com/feross/buffer/blob/master/index.js#L1127
10027 function verifuint (value, max) {
10028 assert(typeof value === 'number', 'cannot write a non-number as a number')
10029 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10030 assert(value <= max, 'value is larger than maximum value for type')
10031 assert(Math.floor(value) === value, 'value has a fractional component')
10034 function pushDataSize (i) {
10035 return i < opcodes.OP_PUSHDATA1 ?
1
10041 function readPushDataInt (buffer, offset) {
10042 var opcode = buffer.readUInt8(offset)
10046 if (opcode < opcodes.OP_PUSHDATA1) {
10051 } else if (opcode === opcodes.OP_PUSHDATA1) {
10052 if (offset +
2 > buffer.length) return null
10053 number = buffer.readUInt8(offset +
1)
10057 } else if (opcode === opcodes.OP_PUSHDATA2) {
10058 if (offset +
3 > buffer.length) return null
10059 number = buffer.readUInt16LE(offset +
1)
10064 if (offset +
5 > buffer.length) return null
10065 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10067 number = buffer.readUInt32LE(offset +
1)
10078 function readUInt64LE (buffer, offset) {
10079 var a = buffer.readUInt32LE(offset)
10080 var b = buffer.readUInt32LE(offset +
4)
10083 verifuint(b + a,
0x001fffffffffffff)
10088 function readVarInt (buffer, offset) {
10089 var t = buffer.readUInt8(offset)
10098 } else if (t <
254) {
10099 number = buffer.readUInt16LE(offset +
1)
10103 } else if (t <
255) {
10104 number = buffer.readUInt32LE(offset +
1)
10109 number = readUInt64LE(buffer, offset +
1)
10119 function writePushDataInt (buffer, number, offset) {
10120 var size = pushDataSize(number)
10124 buffer.writeUInt8(number, offset)
10127 } else if (size ===
2) {
10128 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10129 buffer.writeUInt8(number, offset +
1)
10132 } else if (size ===
3) {
10133 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10134 buffer.writeUInt16LE(number, offset +
1)
10138 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10139 buffer.writeUInt32LE(number, offset +
1)
10145 function writeUInt64LE (buffer, value, offset) {
10146 verifuint(value,
0x001fffffffffffff)
10148 buffer.writeInt32LE(value & -
1, offset)
10149 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10152 function varIntSize (i) {
10155 : i <
0x100000000 ?
5
10159 function writeVarInt (buffer, number, offset) {
10160 var size = varIntSize(number)
10164 buffer.writeUInt8(number, offset)
10167 } else if (size ===
3) {
10168 buffer.writeUInt8(
253, offset)
10169 buffer.writeUInt16LE(number, offset +
1)
10172 } else if (size ===
5) {
10173 buffer.writeUInt8(
254, offset)
10174 buffer.writeUInt32LE(number, offset +
1)
10178 buffer.writeUInt8(
255, offset)
10179 writeUInt64LE(buffer, number, offset +
1)
10185 function varIntBuffer (i) {
10186 var size = varIntSize(i)
10187 var buffer = new Buffer(size)
10188 writeVarInt(buffer, i,
0)
10193 function reverse (buffer) {
10194 var buffer2 = new Buffer(buffer)
10195 Array.prototype.reverse.call(buffer2)
10200 pushDataSize: pushDataSize,
10201 readPushDataInt: readPushDataInt,
10202 readUInt64LE: readUInt64LE,
10203 readVarInt: readVarInt,
10205 varIntBuffer: varIntBuffer,
10206 varIntSize: varIntSize,
10207 writePushDataInt: writePushDataInt,
10208 writeUInt64LE: writeUInt64LE,
10209 writeVarInt: writeVarInt
10212 }).call(this,require("buffer").Buffer)
10213 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10214 var createHash = require('create-hash')
10216 function hash160 (buffer) {
10217 return ripemd160(sha256(buffer))
10220 function hash256 (buffer) {
10221 return sha256(sha256(buffer))
10224 function ripemd160 (buffer) {
10225 return createHash('rmd160').update(buffer).digest()
10228 function sha1 (buffer) {
10229 return createHash('sha1').update(buffer).digest()
10232 function sha256 (buffer) {
10233 return createHash('sha256').update(buffer).digest()
10236 // FIXME: Name not consistent with others
10237 var createHmac = require('create-hmac')
10239 function HmacSHA256 (buffer, secret) {
10240 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10241 return createHmac('sha256', secret).update(buffer).digest()
10244 function HmacSHA512 (buffer, secret) {
10245 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10246 return createHmac('sha512', secret).update(buffer).digest()
10250 ripemd160: ripemd160,
10255 HmacSHA256: HmacSHA256,
10256 HmacSHA512: HmacSHA512
10259 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10260 (function (Buffer){
10261 var assert = require('assert')
10262 var createHmac = require('create-hmac')
10263 var typeForce = require('typeforce')
10265 var BigInteger = require('bigi')
10266 var ECSignature = require('./ecsignature')
10268 var ZERO = new Buffer([
0])
10269 var ONE = new Buffer([
1])
10271 // https://tools.ietf.org/html/rfc6979#section-
3.2
10272 function deterministicGenerateK (curve, hash, d, checkSig) {
10273 typeForce('Buffer', hash)
10274 typeForce('BigInteger', d)
10276 // FIXME: remove/uncomment for
2.0.0
10277 // typeForce('Function', checkSig)
10279 if (typeof checkSig !== 'function') {
10280 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10282 checkSig = function (k) {
10285 var e = BigInteger.fromBuffer(hash)
10287 var Q = G.multiply(k)
10289 if (curve.isInfinity(Q))
10292 var r = Q.affineX.mod(n)
10293 if (r.signum() ===
0)
10296 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10297 if (s.signum() ===
0)
10305 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10307 var x = d.toBuffer(
32)
10308 var k = new Buffer(
32)
10309 var v = new Buffer(
32)
10311 // Step A, ignored as hash already provided
10319 k = createHmac('sha256', k)
10327 v = createHmac('sha256', k).update(v).digest()
10330 k = createHmac('sha256', k)
10338 v = createHmac('sha256', k).update(v).digest()
10340 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10342 v = createHmac('sha256', k).update(v).digest()
10344 var T = BigInteger.fromBuffer(v)
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)
10353 v = createHmac('sha256', k).update(v).digest()
10355 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10357 v = createHmac('sha256', k).update(v).digest()
10358 T = BigInteger.fromBuffer(v)
10364 function sign (curve, hash, d) {
10367 var e = BigInteger.fromBuffer(hash)
10371 deterministicGenerateK(curve, hash, d, function (k) {
10372 var Q = G.multiply(k)
10374 if (curve.isInfinity(Q))
10377 r = Q.affineX.mod(n)
10378 if (r.signum() ===
0)
10381 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10382 if (s.signum() ===
0)
10388 var N_OVER_TWO = n.shiftRight(
1)
10390 // enforce low S values, see bip62: 'low s values in signatures'
10391 if (s.compareTo(N_OVER_TWO)
> 0) {
10395 return new ECSignature(r, s)
10398 function verifyRaw (curve, e, signature, Q) {
10402 var r = signature.r
10403 var s = signature.s
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
10410 var c = s.modInverse(n)
10412 //
1.4.4 Compute u1 = es^−
1 mod n
10413 // u2 = rs^−
1 mod n
10414 var u1 = e.multiply(c).mod(n)
10415 var u2 = r.multiply(c).mod(n)
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)
10421 //
1.4.5 (cont.) Enforce R is not at infinity
10422 if (curve.isInfinity(R)) return false
10424 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10428 function verify (curve, hash, signature, Q) {
10429 //
1.4.2 H = Hash(M), already done by the user
10431 var e = BigInteger.fromBuffer(hash)
10433 return verifyRaw(curve, e, signature, Q)
10437 * Recover a public key from a signature.
10439 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10440 * Key Recovery Operation".
10442 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10444 function recoverPubKey (curve, e, signature, i) {
10445 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10450 var r = signature.r
10451 var s = signature.s
10453 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10454 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10456 // A set LSB signifies that the y-coordinate is odd
10459 // The more significant bit specifies whether we should use the
10460 // first or second candidate key.
10461 var isSecondKey = i
>> 1
10463 //
1.1 Let x = r + jn
10464 var x = isSecondKey ? r.add(n) : r
10465 var R = curve.pointFromX(isYOdd, x)
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')
10471 // Compute -e from e
10472 var eNeg = e.negate().mod(n)
10474 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10475 // Q = r^-
1 (sR + -eG)
10476 var rInv = r.modInverse(n)
10478 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10485 * Calculate pubkey extraction parameter.
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
10492 * This function simply tries all four cases and returns the value
10493 * that resulted in a successful pubkey recovery.
10495 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10496 for (var i =
0; i <
4; i++) {
10497 var Qprime = recoverPubKey(curve, e, signature, i)
10500 if (Qprime.equals(Q)) {
10505 throw new Error('Unable to find valid recovery factor')
10509 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10510 deterministicGenerateK: deterministicGenerateK,
10511 recoverPubKey: recoverPubKey,
10514 verifyRaw: verifyRaw
10517 }).call(this,require(
"buffer").Buffer)
10518 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10519 (function (Buffer){
10520 var assert = require('assert')
10521 var base58check = require('bs58check')
10522 var ecdsa = require('./ecdsa')
10523 var networks = require('./networks')
10524 var randomBytes = require('randombytes')
10525 var typeForce = require('typeforce')
10527 var BigInteger = require('bigi')
10528 var ECPubKey = require('./ecpubkey')
10530 var ecurve = require('ecurve')
10531 var secp256k1 = ecurve.getCurveByName('secp256k1')
10533 function ECKey (d, compressed) {
10534 assert(d.signum()
> 0, 'Private key must be greater than
0')
10535 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10537 var Q = ECKey.curve.G.multiply(d)
10540 this.pub = new ECPubKey(Q, compressed)
10544 ECKey.curve = secp256k1
10546 // Static constructors
10547 ECKey.fromWIF = function (string) {
10548 var payload = base58check.decode(string)
10549 var compressed = false
10551 // Ignore the version byte
10552 payload = payload.slice(
1)
10554 if (payload.length ===
33) {
10555 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10557 // Truncate the compression flag
10558 payload = payload.slice(
0, -
1)
10562 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10564 var d = BigInteger.fromBuffer(payload)
10565 return new ECKey(d, compressed)
10568 ECKey.makeRandom = function (compressed, rng) {
10569 rng = rng || randomBytes
10571 var buffer = rng(
32)
10572 typeForce('Buffer', buffer)
10573 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10575 var d = BigInteger.fromBuffer(buffer)
10576 d = d.mod(ECKey.curve.n)
10578 return new ECKey(d, compressed)
10581 // Export functions
10582 ECKey.prototype.toWIF = function (network) {
10583 network = network || networks.bitcoin
10585 var bufferLen = this.pub.compressed ?
34 :
33
10586 var buffer = new Buffer(bufferLen)
10588 buffer.writeUInt8(network.wif,
0)
10589 this.d.toBuffer(
32).copy(buffer,
1)
10591 if (this.pub.compressed) {
10592 buffer.writeUInt8(
0x01,
33)
10595 return base58check.encode(buffer)
10599 ECKey.prototype.sign = function (hash) {
10600 return ecdsa.sign(ECKey.curve, hash, this.d)
10603 module.exports = ECKey
10605 }).call(this,require(
"buffer").Buffer)
10606 },{
"./ecdsa":
59,
"./ecpubkey":
61,
"./networks":
66,
"assert":
5,
"bigi":
3,
"bs58check":
31,
"buffer":
7,
"ecurve":
49,
"randombytes":
52,
"typeforce":
53}],
61:[function(require,module,exports){
10607 (function (Buffer){
10608 var crypto = require('./crypto')
10609 var ecdsa = require('./ecdsa')
10610 var typeForce = require('typeforce')
10611 var networks = require('./networks')
10613 var Address = require('./address')
10615 var ecurve = require('ecurve')
10616 var secp256k1 = ecurve.getCurveByName('secp256k1')
10618 function ECPubKey (Q, compressed) {
10619 if (compressed === undefined) {
10623 typeForce('Point', Q)
10624 typeForce('Boolean', compressed)
10626 this.compressed = compressed
10631 ECPubKey.curve = secp256k1
10633 // Static constructors
10634 ECPubKey.fromBuffer = function (buffer) {
10635 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10636 return new ECPubKey(Q, Q.compressed)
10639 ECPubKey.fromHex = function (hex) {
10640 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10644 ECPubKey.prototype.getAddress = function (network) {
10645 network = network || networks.bitcoin
10647 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10650 ECPubKey.prototype.verify = function (hash, signature) {
10651 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10654 // Export functions
10655 ECPubKey.prototype.toBuffer = function () {
10656 return this.Q.getEncoded(this.compressed)
10659 ECPubKey.prototype.toHex = function () {
10660 return this.toBuffer().toString('hex')
10663 module.exports = ECPubKey
10665 }).call(this,require(
"buffer").Buffer)
10666 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10667 (function (Buffer){
10668 var assert = require('assert')
10669 var typeForce = require('typeforce')
10671 var BigInteger = require('bigi')
10673 function ECSignature (r, s) {
10674 typeForce('BigInteger', r)
10675 typeForce('BigInteger', s)
10681 ECSignature.parseCompact = function (buffer) {
10682 assert.equal(buffer.length,
65, 'Invalid signature length')
10683 var i = buffer.readUInt8(
0) -
27
10686 assert.equal(i, i &
7, 'Invalid signature parameter')
10687 var compressed = !!(i &
4)
10689 // Recovery param only
10692 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10693 var s = BigInteger.fromBuffer(buffer.slice(
33))
10696 compressed: compressed,
10698 signature: new ECSignature(r, s)
10702 ECSignature.fromDER = function (buffer) {
10703 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10704 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10705 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10707 var rLen = buffer.readUInt8(
3)
10708 assert(rLen
> 0, 'R length is zero')
10710 var offset =
4 + rLen
10711 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10713 var sLen = buffer.readUInt8(offset +
1)
10714 assert(sLen
> 0, 'S length is zero')
10716 var rB = buffer.slice(
4, offset)
10717 var sB = buffer.slice(offset +
2)
10720 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10721 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10724 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10725 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10728 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10729 var r = BigInteger.fromDERInteger(rB)
10730 var s = BigInteger.fromDERInteger(sB)
10732 assert(r.signum()
>=
0, 'R value is negative')
10733 assert(s.signum()
>=
0, 'S value is negative')
10735 return new ECSignature(r, s)
10738 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10739 ECSignature.parseScriptSignature = function (buffer) {
10740 var hashType = buffer.readUInt8(buffer.length -
1)
10741 var hashTypeMod = hashType & ~
0x80
10743 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10746 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10751 ECSignature.prototype.toCompact = function (i, compressed) {
10758 var buffer = new Buffer(
65)
10759 buffer.writeUInt8(i,
0)
10761 this.r.toBuffer(
32).copy(buffer,
1)
10762 this.s.toBuffer(
32).copy(buffer,
33)
10767 ECSignature.prototype.toDER = function () {
10768 var rBa = this.r.toDERInteger()
10769 var sBa = this.s.toDERInteger()
10774 sequence.push(
0x02, rBa.length)
10775 sequence = sequence.concat(rBa)
10778 sequence.push(
0x02, sBa.length)
10779 sequence = sequence.concat(sBa)
10782 sequence.unshift(
0x30, sequence.length)
10784 return new Buffer(sequence)
10787 ECSignature.prototype.toScriptSignature = function (hashType) {
10788 var hashTypeMod = hashType & ~
0x80
10789 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10791 var hashTypeBuffer = new Buffer(
1)
10792 hashTypeBuffer.writeUInt8(hashType,
0)
10794 return Buffer.concat([this.toDER(), hashTypeBuffer])
10797 module.exports = ECSignature
10799 }).call(this,require(
"buffer").Buffer)
10800 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
10801 (function (Buffer){
10802 var assert = require('assert')
10803 var base58check = require('bs58check')
10804 var bcrypto = require('./crypto')
10805 var createHmac = require('create-hmac')
10806 var typeForce = require('typeforce')
10807 var networks = require('./networks')
10809 var BigInteger = require('bigi')
10810 var ECKey = require('./eckey')
10811 var ECPubKey = require('./ecpubkey')
10813 var ecurve = require('ecurve')
10814 var curve = ecurve.getCurveByName('secp256k1')
10816 function findBIP32NetworkByVersion (version) {
10817 for (var name in networks) {
10818 var network = networks[name]
10820 if (version === network.bip32.private || version === network.bip32.public) {
10825 assert(false, 'Could not find network for ' + version.toString(
16))
10828 function HDNode (K, chainCode, network) {
10829 network = network || networks.bitcoin
10831 typeForce('Buffer', chainCode)
10833 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
10834 assert(network.bip32, 'Unknown BIP32 constants for network')
10836 this.chainCode = chainCode
10839 this.parentFingerprint =
0x00000000
10840 this.network = network
10842 if (K instanceof BigInteger) {
10843 this.privKey = new ECKey(K, true)
10844 this.pubKey = this.privKey.pub
10845 } else if (K instanceof ECKey) {
10846 assert(K.pub.compressed, 'ECKey must be compressed')
10848 this.pubKey = K.pub
10849 } else if (K instanceof ECPubKey) {
10850 assert(K.compressed, 'ECPubKey must be compressed')
10853 this.pubKey = new ECPubKey(K, true)
10857 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10858 HDNode.HIGHEST_BIT =
0x80000000
10861 HDNode.fromSeedBuffer = function (seed, network) {
10862 typeForce('Buffer', seed)
10864 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
10865 assert(seed.length <=
64, 'Seed should be at most
512 bits')
10867 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10868 var IL = I.slice(
0,
32)
10869 var IR = I.slice(
32)
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)
10875 return new HDNode(pIL, IR, network)
10878 HDNode.fromSeedHex = function (hex, network) {
10879 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10882 HDNode.fromBase58 = function (string, network) {
10883 return HDNode.fromBuffer(base58check.decode(string), network, true)
10886 // FIXME: remove in
2.x.y
10887 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10888 if (!__ignoreDeprecation) {
10889 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
10892 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10894 //
4 byte: version bytes
10895 var version = buffer.readUInt32BE(
0)
10898 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10902 network = findBIP32NetworkByVersion(version)
10905 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
10906 var depth = buffer.readUInt8(
4)
10908 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
10909 var parentFingerprint = buffer.readUInt32BE(
5)
10911 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
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')
10919 //
32 bytes: the chain code
10920 var chainCode = buffer.slice(
13,
45)
10923 //
33 bytes: private key data (
0x00 + k)
10924 if (version === network.bip32.private) {
10925 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
10926 data = buffer.slice(
46,
78)
10927 var d = BigInteger.fromBuffer(data)
10928 hd = new HDNode(d, chainCode, network)
10930 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
10932 data = buffer.slice(
45,
78)
10933 var Q = ecurve.Point.decodeFrom(curve, data)
10934 assert.equal(Q.compressed, true, 'Invalid public key')
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.
10940 hd = new HDNode(Q, chainCode, network)
10945 hd.parentFingerprint = parentFingerprint
10950 // FIXME: remove in
2.x.y
10951 HDNode.fromHex = function (hex, network) {
10952 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10955 HDNode.prototype.getIdentifier = function () {
10956 return bcrypto.hash160(this.pubKey.toBuffer())
10959 HDNode.prototype.getFingerprint = function () {
10960 return this.getIdentifier().slice(
0,
4)
10963 HDNode.prototype.getAddress = function () {
10964 return this.pubKey.getAddress(this.network)
10967 HDNode.prototype.neutered = function () {
10968 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10969 neutered.depth = this.depth
10970 neutered.index = this.index
10971 neutered.parentFingerprint = this.parentFingerprint
10976 HDNode.prototype.toBase58 = function (isPrivate) {
10977 return base58check.encode(this.toBuffer(isPrivate, true))
10980 // FIXME: remove in
2.x.y
10981 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10982 if (isPrivate === undefined) {
10983 isPrivate = !!this.privKey
10985 // FIXME: remove in
2.x.y
10987 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10990 if (!__ignoreDeprecation) {
10991 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
10995 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10996 var buffer = new Buffer(HDNode.LENGTH)
10998 //
4 bytes: version bytes
10999 buffer.writeUInt32BE(version,
0)
11002 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11003 buffer.writeUInt8(this.depth,
4)
11005 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11006 buffer.writeUInt32BE(this.parentFingerprint,
5)
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)
11012 //
32 bytes: the chain code
11013 this.chainCode.copy(buffer,
13)
11015 //
33 bytes: the public key or private key data
11017 // FIXME: remove in
2.x.y
11018 assert(this.privKey, 'Missing private key')
11020 //
0x00 + k for private keys
11021 buffer.writeUInt8(
0,
45)
11022 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11024 // X9.62 encoding for public keys
11025 this.pubKey.toBuffer().copy(buffer,
45)
11031 // FIXME: remove in
2.x.y
11032 HDNode.prototype.toHex = function (isPrivate) {
11033 return this.toBuffer(isPrivate).toString('hex')
11036 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11037 HDNode.prototype.derive = function (index) {
11038 var isHardened = index
>= HDNode.HIGHEST_BIT
11039 var indexBuffer = new Buffer(
4)
11040 indexBuffer.writeUInt32BE(index,
0)
11046 assert(this.privKey, 'Could not derive hardened child key')
11048 // data =
0x00 || ser256(kpar) || ser32(index)
11049 data = Buffer.concat([
11050 this.privKey.d.toBuffer(
33),
11056 // data = serP(point(kpar)) || ser32(index)
11057 // = serP(Kpar) || ser32(index)
11058 data = Buffer.concat([
11059 this.pubKey.toBuffer(),
11064 var I = createHmac('sha512', this.chainCode).update(data).digest()
11065 var IL = I.slice(
0,
32)
11066 var IR = I.slice(
32)
11068 var pIL = BigInteger.fromBuffer(IL)
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)
11075 // Private parent key -
> private child key
11077 if (this.privKey) {
11078 // ki = parse256(IL) + kpar (mod n)
11079 var ki = pIL.add(this.privKey.d).mod(curve.n)
11081 // In case ki ==
0, proceed with the next value for i
11082 if (ki.signum() ===
0) {
11083 return this.derive(index +
1)
11086 hd = new HDNode(ki, IR, this.network)
11088 // Public parent key -
> public child key
11090 // Ki = point(parse256(IL)) + Kpar
11092 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
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)
11099 hd = new HDNode(Ki, IR, this.network)
11102 hd.depth = this.depth +
1
11104 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11109 HDNode.prototype.deriveHardened = function (index) {
11110 // Only derives hardened private keys by default
11111 return this.derive(index + HDNode.HIGHEST_BIT)
11114 HDNode.prototype.toString = HDNode.prototype.toBase58
11116 module.exports = HDNode
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){
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')
11141 },{"./address":
54,"./base58check":
55,"./block":
56,"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./eckey":
60,"./ecpubkey":
61,"./ecsignature":
62,"./hdnode":
63,"./message":
65,"./networks":
66,"./opcodes":
67,"./script":
68,"./scripts":
69,"./transaction":
70,"./transaction_builder":
71,"./wallet":
72}],
65:[function(require,module,exports){
11142 (function (Buffer){
11143 var bufferutils = require('./bufferutils')
11144 var crypto = require('./crypto')
11145 var ecdsa = require('./ecdsa')
11146 var networks = require('./networks')
11148 var BigInteger = require('bigi')
11149 var ECPubKey = require('./ecpubkey')
11150 var ECSignature = require('./ecsignature')
11152 var ecurve = require('ecurve')
11153 var ecparams = ecurve.getCurveByName('secp256k1')
11155 function magicHash (message, network) {
11156 var magicPrefix = new Buffer(network.magicPrefix)
11157 var messageBuffer = new Buffer(message)
11158 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11160 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11161 return crypto.hash256(buffer)
11164 function sign (privKey, message, network) {
11165 network = network || networks.bitcoin
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)
11172 return signature.toCompact(i, privKey.pub.compressed)
11175 // TODO: network could be implied from address
11176 function verify (address, signature, message, network) {
11177 if (!Buffer.isBuffer(signature)) {
11178 signature = new Buffer(signature, 'base64')
11181 network = network || networks.bitcoin
11183 var hash = magicHash(message, network)
11184 var parsed = ECSignature.parseCompact(signature)
11185 var e = BigInteger.fromBuffer(hash)
11186 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11188 var pubKey = new ECPubKey(Q, parsed.compressed)
11189 return pubKey.getAddress(network).toString() === address.toString()
11193 magicHash: magicHash,
11198 }).call(this,require("buffer").Buffer)
11199 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11200 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11201 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11205 magicPrefix: '\x18Bitcoin Signed Message:\n',
11207 public:
0x0488b21e,
11208 private:
0x0488ade4
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')
11218 magicPrefix: '\x18Bitcoin Signed Message:\n',
11220 public:
0x043587cf,
11221 private:
0x04358394
11226 dustThreshold:
546,
11228 estimateFee: estimateFee('testnet')
11231 magicPrefix: '\x19Litecoin Signed Message:\n',
11233 public:
0x019da462,
11234 private:
0x019d9cfe
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')
11245 magicPrefix: '\x19Dogecoin Signed Message:\n',
11247 public:
0x02facafd,
11248 private:
0x02fac398
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')
11259 magicPrefix: '\x18Viacoin Signed Message:\n',
11261 public:
0x0488b21e,
11262 private:
0x0488ade4
11267 dustThreshold:
560,
11268 dustSoftThreshold:
100000,
11269 feePerKb:
100000, //
11270 estimateFee: estimateFee('viacoin')
11273 magicPrefix: '\x18Viacoin Signed Message:\n',
11275 public:
0x043587cf,
11276 private:
0x04358394
11281 dustThreshold:
560,
11282 dustSoftThreshold:
100000,
11284 estimateFee: estimateFee('viacointestnet')
11287 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11289 public:
0x019da462,
11290 private:
0x019d9cfe
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')
11301 magicPrefix: '\x19Jumbucks Signed Message:\n',
11303 public:
0x037a689a,
11304 private:
0x037a6460
11310 dustSoftThreshold:
10000,
11312 estimateFee: estimateFee('jumbucks')
11315 magicPrefix: '\x18Zetacoin Signed Message:\n',
11317 public:
0x0488b21e,
11318 private:
0x0488ade4
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')
11329 function estimateFee (type) {
11330 return function (tx) {
11331 var network = networks[type]
11332 var baseFee = network.feePerKb
11333 var byteSize = tx.toBuffer().length
11335 var fee = baseFee * Math.ceil(byteSize /
1000)
11336 if (network.dustSoftThreshold === undefined) return fee
11338 tx.outs.forEach(function (e) {
11339 if (e.value < network.dustSoftThreshold) {
11348 module.exports = networks
11350 },{}],
67:[function(require,module,exports){
11391 OP_TOALTSTACK:
107,
11392 OP_FROMALTSTACK:
108,
11424 OP_EQUALVERIFY:
136,
11449 OP_NUMEQUALVERIFY:
157,
11450 OP_NUMNOTEQUAL:
158,
11452 OP_GREATERTHAN:
160,
11453 OP_LESSTHANOREQUAL:
161,
11454 OP_GREATERTHANOREQUAL:
162,
11466 OP_CODESEPARATOR:
171,
11468 OP_CHECKSIGVERIFY:
173,
11469 OP_CHECKMULTISIG:
174,
11470 OP_CHECKMULTISIGVERIFY:
175,
11484 // template matching params
11485 OP_PUBKEYHASH:
253,
11487 OP_INVALIDOPCODE:
255
11490 },{}],
68:[function(require,module,exports){
11491 (function (Buffer){
11492 var assert = require('assert')
11493 var bufferutils = require('./bufferutils')
11494 var crypto = require('./crypto')
11495 var typeForce = require('typeforce')
11496 var opcodes = require('./opcodes')
11498 function Script (buffer, chunks) {
11499 typeForce('Buffer', buffer)
11500 typeForce('Array', chunks)
11502 this.buffer = buffer
11503 this.chunks = chunks
11506 Script.fromASM = function (asm) {
11507 var strChunks = asm.split(' ')
11508 var chunks = strChunks.map(function (strChunk) {
11510 if (strChunk in opcodes) {
11511 return opcodes[strChunk]
11515 return new Buffer(strChunk, 'hex')
11519 return Script.fromChunks(chunks)
11522 Script.fromBuffer = function (buffer) {
11526 while (i < buffer.length) {
11527 var opcode = buffer.readUInt8(i)
11530 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11531 var d = bufferutils.readPushDataInt(buffer, i)
11533 // did reading a pushDataInt fail? return non-chunked script
11534 if (d === null) return new Script(buffer, [])
11537 // attempt to read too much data?
11538 if (i + d.number
> buffer.length) return new Script(buffer, [])
11540 var data = buffer.slice(i, i + d.number)
11547 chunks.push(opcode)
11553 return new Script(buffer, chunks)
11556 Script.fromChunks = function (chunks) {
11557 typeForce('Array', chunks)
11559 var bufferSize = chunks.reduce(function (accum, chunk) {
11561 if (Buffer.isBuffer(chunk)) {
11562 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11569 var buffer = new Buffer(bufferSize)
11572 chunks.forEach(function (chunk) {
11574 if (Buffer.isBuffer(chunk)) {
11575 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11577 chunk.copy(buffer, offset)
11578 offset += chunk.length
11582 buffer.writeUInt8(chunk, offset)
11587 assert.equal(offset, buffer.length, 'Could not decode chunks')
11588 return new Script(buffer, chunks)
11591 Script.fromHex = function (hex) {
11592 return Script.fromBuffer(new Buffer(hex, 'hex'))
11595 Script.EMPTY = Script.fromChunks([])
11597 Script.prototype.getHash = function () {
11598 return crypto.hash160(this.buffer)
11601 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11602 Script.prototype.without = function (needle) {
11603 return Script.fromChunks(this.chunks.filter(function (op) {
11604 return op !== needle
11608 var reverseOps = []
11609 for (var op in opcodes) {
11610 var code = opcodes[op]
11611 reverseOps[code] = op
11614 Script.prototype.toASM = function () {
11615 return this.chunks.map(function (chunk) {
11617 if (Buffer.isBuffer(chunk)) {
11618 return chunk.toString('hex')
11622 return reverseOps[chunk]
11627 Script.prototype.toBuffer = function () {
11631 Script.prototype.toHex = function () {
11632 return this.toBuffer().toString('hex')
11635 module.exports = Script
11637 }).call(this,require("buffer").Buffer)
11638 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11639 (function (Buffer){
11640 var assert = require('assert')
11641 var ops = require('./opcodes')
11642 var typeForce = require('typeforce')
11644 var ecurve = require('ecurve')
11645 var curve = ecurve.getCurveByName('secp256k1')
11647 var ECSignature = require('./ecsignature')
11648 var Script = require('./script')
11650 function isCanonicalPubKey (buffer) {
11651 if (!Buffer.isBuffer(buffer)) return false
11654 ecurve.Point.decodeFrom(curve, buffer)
11656 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11665 function isCanonicalSignature (buffer) {
11666 if (!Buffer.isBuffer(buffer)) return false
11669 ECSignature.parseScriptSignature(buffer)
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/))) {
11681 function isPubKeyHashInput (script) {
11682 return script.chunks.length ===
2 &&
11683 isCanonicalSignature(script.chunks[
0]) &&
11684 isCanonicalPubKey(script.chunks[
1])
11687 function isPubKeyHashOutput (script) {
11688 return script.chunks.length ===
5 &&
11689 script.chunks[
0] === ops.OP_DUP &&
11690 script.chunks[
1] === ops.OP_HASH160 &&
11691 Buffer.isBuffer(script.chunks[
2]) &&
11692 script.chunks[
2].length ===
20 &&
11693 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11694 script.chunks[
4] === ops.OP_CHECKSIG
11697 function isPubKeyInput (script) {
11698 return script.chunks.length ===
1 &&
11699 isCanonicalSignature(script.chunks[
0])
11702 function isPubKeyOutput (script) {
11703 return script.chunks.length ===
2 &&
11704 isCanonicalPubKey(script.chunks[
0]) &&
11705 script.chunks[
1] === ops.OP_CHECKSIG
11708 function isScriptHashInput (script, allowIncomplete) {
11709 if (script.chunks.length <
2) return false
11711 var lastChunk = script.chunks[script.chunks.length -
1]
11712 if (!Buffer.isBuffer(lastChunk)) return false
11714 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11715 var redeemScript = Script.fromBuffer(lastChunk)
11717 // is redeemScript a valid script?
11718 if (redeemScript.chunks.length ===
0) return false
11720 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11723 function isScriptHashOutput (script) {
11724 return script.chunks.length ===
3 &&
11725 script.chunks[
0] === ops.OP_HASH160 &&
11726 Buffer.isBuffer(script.chunks[
1]) &&
11727 script.chunks[
1].length ===
20 &&
11728 script.chunks[
2] === ops.OP_EQUAL
11731 // allowIncomplete is to account for combining signatures
11732 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11733 function isMultisigInput (script, allowIncomplete) {
11734 if (script.chunks.length <
2) return false
11735 if (script.chunks[
0] !== ops.OP_0) return false
11737 if (allowIncomplete) {
11738 return script.chunks.slice(
1).every(function (chunk) {
11739 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11743 return script.chunks.slice(
1).every(isCanonicalSignature)
11746 function isMultisigOutput (script) {
11747 if (script.chunks.length <
4) return false
11748 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
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
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
11760 var m = mOp - (ops.OP_1 -
1)
11761 var n = nOp - (ops.OP_1 -
1)
11762 if (n < m) return false
11764 var pubKeys = script.chunks.slice(
1, -
2)
11765 if (n < pubKeys.length) return false
11767 return pubKeys.every(isCanonicalPubKey)
11770 function isNullDataOutput (script) {
11771 return script.chunks[
0] === ops.OP_RETURN
11774 function classifyOutput (script) {
11775 typeForce('Script', script)
11777 if (isPubKeyHashOutput(script)) {
11778 return 'pubkeyhash'
11779 } else if (isScriptHashOutput(script)) {
11780 return 'scripthash'
11781 } else if (isMultisigOutput(script)) {
11783 } else if (isPubKeyOutput(script)) {
11785 } else if (isNullDataOutput(script)) {
11789 return 'nonstandard'
11792 function classifyInput (script, allowIncomplete) {
11793 typeForce('Script', script)
11795 if (isPubKeyHashInput(script)) {
11796 return 'pubkeyhash'
11797 } else if (isMultisigInput(script, allowIncomplete)) {
11799 } else if (isScriptHashInput(script, allowIncomplete)) {
11800 return 'scripthash'
11801 } else if (isPubKeyInput(script)) {
11805 return 'nonstandard'
11808 // Standard Script Templates
11809 // {pubKey} OP_CHECKSIG
11810 function pubKeyOutput (pubKey) {
11811 return Script.fromChunks([
11817 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11818 function pubKeyHashOutput (hash) {
11819 typeForce('Buffer', hash)
11821 return Script.fromChunks([
11825 ops.OP_EQUALVERIFY,
11830 // OP_HASH160 {scriptHash} OP_EQUAL
11831 function scriptHashOutput (hash) {
11832 typeForce('Buffer', hash)
11834 return Script.fromChunks([
11841 // m [pubKeys ...] n OP_CHECKMULTISIG
11842 function multisigOutput (m, pubKeys) {
11843 typeForce(['ECPubKey'], pubKeys)
11845 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
11847 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11848 return pubKey.toBuffer()
11850 var n = pubKeys.length
11852 return Script.fromChunks([].concat(
11853 (ops.OP_1 -
1) + m,
11855 (ops.OP_1 -
1) + n,
11856 ops.OP_CHECKMULTISIG
11861 function pubKeyInput (signature) {
11862 typeForce('Buffer', signature)
11864 return Script.fromChunks([signature])
11867 // {signature} {pubKey}
11868 function pubKeyHashInput (signature, pubKey) {
11869 typeForce('Buffer', signature)
11871 return Script.fromChunks([signature, pubKey.toBuffer()])
11874 //
<scriptSig> {serialized scriptPubKey script}
11875 function scriptHashInput (scriptSig, scriptPubKey) {
11876 return Script.fromChunks([].concat(
11878 scriptPubKey.toBuffer()
11882 // OP_0 [signatures ...]
11883 function multisigInput (signatures, scriptPubKey) {
11884 if (scriptPubKey) {
11885 assert(isMultisigOutput(scriptPubKey))
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)
11892 assert(signatures.length
>= m, 'Not enough signatures provided')
11893 assert(signatures.length <= n, 'Too many signatures provided')
11896 return Script.fromChunks([].concat(ops.OP_0, signatures))
11899 function nullDataOutput (data) {
11900 return Script.fromChunks([ops.OP_RETURN, data])
11904 isCanonicalPubKey: isCanonicalPubKey,
11905 isCanonicalSignature: isCanonicalSignature,
11906 isPubKeyHashInput: isPubKeyHashInput,
11907 isPubKeyHashOutput: isPubKeyHashOutput,
11908 isPubKeyInput: isPubKeyInput,
11909 isPubKeyOutput: isPubKeyOutput,
11910 isScriptHashInput: isScriptHashInput,
11911 isScriptHashOutput: isScriptHashOutput,
11912 isMultisigInput: isMultisigInput,
11913 isMultisigOutput: isMultisigOutput,
11914 isNullDataOutput: isNullDataOutput,
11915 classifyOutput: classifyOutput,
11916 classifyInput: classifyInput,
11917 pubKeyOutput: pubKeyOutput,
11918 pubKeyHashOutput: pubKeyHashOutput,
11919 scriptHashOutput: scriptHashOutput,
11920 multisigOutput: multisigOutput,
11921 pubKeyInput: pubKeyInput,
11922 pubKeyHashInput: pubKeyHashInput,
11923 scriptHashInput: scriptHashInput,
11924 multisigInput: multisigInput,
11925 dataOutput: function (data) {
11926 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
11927 return nullDataOutput(data)
11929 nullDataOutput: nullDataOutput
11932 }).call(this,require("buffer").Buffer)
11933 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
11934 (function (Buffer){
11935 var assert = require('assert')
11936 var bufferutils = require('./bufferutils')
11937 var crypto = require('./crypto')
11938 var typeForce = require('typeforce')
11939 var opcodes = require('./opcodes')
11940 var scripts = require('./scripts')
11942 var Address = require('./address')
11943 var ECSignature = require('./ecsignature')
11944 var Script = require('./script')
11946 function Transaction () {
11953 Transaction.DEFAULT_SEQUENCE =
0xffffffff
11954 Transaction.SIGHASH_ALL =
0x01
11955 Transaction.SIGHASH_NONE =
0x02
11956 Transaction.SIGHASH_SINGLE =
0x03
11957 Transaction.SIGHASH_ANYONECANPAY =
0x80
11959 Transaction.fromBuffer = function (buffer, __disableAssert) {
11961 function readSlice (n) {
11963 return buffer.slice(offset - n, offset)
11966 function readUInt32 () {
11967 var i = buffer.readUInt32LE(offset)
11972 function readUInt64 () {
11973 var i = bufferutils.readUInt64LE(buffer, offset)
11978 function readVarInt () {
11979 var vi = bufferutils.readVarInt(buffer, offset)
11984 function readScript () {
11985 return Script.fromBuffer(readSlice(readVarInt()))
11988 function readGenerationScript () {
11989 return new Script(readSlice(readVarInt()), [])
11992 var tx = new Transaction()
11993 tx.version = readUInt32()
11995 var vinLen = readVarInt()
11996 for (var i =
0; i < vinLen; ++i) {
11997 var hash = readSlice(
32)
11999 if (Transaction.isCoinbaseHash(hash)) {
12002 index: readUInt32(),
12003 script: readGenerationScript(),
12004 sequence: readUInt32()
12009 index: readUInt32(),
12010 script: readScript(),
12011 sequence: readUInt32()
12016 var voutLen = readVarInt()
12017 for (i =
0; i < voutLen; ++i) {
12019 value: readUInt64(),
12020 script: readScript()
12024 tx.locktime = readUInt32()
12026 if (!__disableAssert) {
12027 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12033 Transaction.fromHex = function (hex) {
12034 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12037 Transaction.isCoinbaseHash = function (buffer) {
12038 return Array.prototype.every.call(buffer, function (x) {
12044 * Create a new txIn.
12046 * Can be called with any of:
12048 * - A transaction and an index
12049 * - A transaction hash and an index
12051 * Note that this method does not sign the created input.
12053 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12054 if (sequence === undefined || sequence === null) {
12055 sequence = Transaction.DEFAULT_SEQUENCE
12058 script = script || Script.EMPTY
12060 if (typeof hash === 'string') {
12061 // TxId hex is big-endian, we need little-endian
12062 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12063 } else if (hash instanceof Transaction) {
12064 hash = hash.getHash()
12067 typeForce('Buffer', hash)
12068 typeForce('Number', index)
12069 typeForce('Number', sequence)
12070 typeForce('Script', script)
12072 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12074 // Add the input and return the input's index
12075 return (this.ins.push({
12084 * Create a new txOut.
12086 * Can be called with:
12088 * - A base58 address string and a value
12089 * - An Address object and a value
12090 * - A scriptPubKey Script and a value
12092 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12093 // Attempt to get a valid address if it's a base58 address string
12094 if (typeof scriptPubKey === 'string') {
12095 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12098 // Attempt to get a valid script if it's an Address object
12099 if (scriptPubKey instanceof Address) {
12100 scriptPubKey = scriptPubKey.toOutputScript()
12103 typeForce('Script', scriptPubKey)
12104 typeForce('Number', value)
12106 // Add the output and return the output's index
12107 return (this.outs.push({
12108 script: scriptPubKey,
12113 Transaction.prototype.clone = function () {
12114 var newTx = new Transaction()
12115 newTx.version = this.version
12116 newTx.locktime = this.locktime
12118 newTx.ins = this.ins.map(function (txIn) {
12122 script: txIn.script,
12123 sequence: txIn.sequence
12127 newTx.outs = this.outs.map(function (txOut) {
12129 script: txOut.script,
12138 * Hash transaction for signing a specific input.
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.
12145 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12146 // FIXME: remove in
2.x.y
12147 if (arguments[
0] instanceof Script) {
12148 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12150 // swap the arguments (must be stored in tmp, arguments is special)
12151 var tmp = arguments[
0]
12152 inIndex = arguments[
1]
12153 prevOutScript = tmp
12156 typeForce('Number', inIndex)
12157 typeForce('Script', prevOutScript)
12158 typeForce('Number', hashType)
12160 assert(inIndex
>=
0, 'Invalid vin index')
12161 assert(inIndex < this.ins.length, 'Invalid vin index')
12163 var txTmp = this.clone()
12164 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12166 // Blank out other inputs' signatures
12167 txTmp.ins.forEach(function (txIn) {
12168 txIn.script = Script.EMPTY
12170 txTmp.ins[inIndex].script = hashScript
12172 var hashTypeModifier = hashType &
0x1f
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')
12180 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12181 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12184 var hashTypeBuffer = new Buffer(
4)
12185 hashTypeBuffer.writeInt32LE(hashType,
0)
12187 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12188 return crypto.hash256(buffer)
12191 Transaction.prototype.getHash = function () {
12192 return crypto.hash256(this.toBuffer())
12195 Transaction.prototype.getId = function () {
12196 // TxHash is little-endian, we need big-endian
12197 return bufferutils.reverse(this.getHash()).toString('hex')
12200 Transaction.prototype.toBuffer = function () {
12201 function scriptSize (script) {
12202 var length = script.buffer.length
12204 return bufferutils.varIntSize(length) + length
12207 var buffer = new Buffer(
12209 bufferutils.varIntSize(this.ins.length) +
12210 bufferutils.varIntSize(this.outs.length) +
12211 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12212 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12216 function writeSlice (slice) {
12217 slice.copy(buffer, offset)
12218 offset += slice.length
12221 function writeUInt32 (i) {
12222 buffer.writeUInt32LE(i, offset)
12226 function writeUInt64 (i) {
12227 bufferutils.writeUInt64LE(buffer, i, offset)
12231 function writeVarInt (i) {
12232 var n = bufferutils.writeVarInt(buffer, i, offset)
12236 writeUInt32(this.version)
12237 writeVarInt(this.ins.length)
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)
12247 writeVarInt(this.outs.length)
12248 this.outs.forEach(function (txOut) {
12249 writeUInt64(txOut.value)
12250 writeVarInt(txOut.script.buffer.length)
12251 writeSlice(txOut.script.buffer)
12254 writeUInt32(this.locktime)
12259 Transaction.prototype.toHex = function () {
12260 return this.toBuffer().toString('hex')
12263 Transaction.prototype.setInputScript = function (index, script) {
12264 typeForce('Number', index)
12265 typeForce('Script', script)
12267 this.ins[index].script = script
12270 // FIXME: remove in
2.x.y
12271 Transaction.prototype.sign = function (index, privKey, hashType) {
12272 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12274 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12275 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12277 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12278 this.setInputScript(index, scriptSig)
12281 // FIXME: remove in
2.x.y
12282 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12283 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12285 hashType = hashType || Transaction.SIGHASH_ALL
12287 var hash = this.hashForSignature(index, prevOutScript, hashType)
12288 var signature = privKey.sign(hash)
12290 return signature.toScriptSignature(hashType)
12293 // FIXME: remove in
2.x.y
12294 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12295 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12297 var parsed = ECSignature.parseScriptSignature(buffer)
12298 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12300 return pubKey.verify(hash, parsed.signature)
12303 module.exports = Transaction
12305 }).call(this,require("buffer").Buffer)
12306 },{"./address":
54,"./bufferutils":
57,"./crypto":
58,"./ecsignature":
62,"./opcodes":
67,"./script":
68,"./scripts":
69,"assert":
5,"buffer":
7,"typeforce":
53}],
71:[function(require,module,exports){
12307 (function (Buffer){
12308 var assert = require('assert')
12309 var ops = require('./opcodes')
12310 var scripts = require('./scripts')
12312 var ECPubKey = require('./ecpubkey')
12313 var ECSignature = require('./ecsignature')
12314 var Script = require('./script')
12315 var Transaction = require('./transaction')
12317 function extractInput (txIn) {
12319 var scriptSig = txIn.script
12321 var prevOutType = scripts.classifyInput(scriptSig, true)
12324 // Re-classify if scriptHash
12325 if (prevOutType === 'scripthash') {
12326 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12327 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12329 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12330 scriptType = scripts.classifyInput(scriptSig, true)
12332 scriptType = prevOutType
12335 // Extract hashType, pubKeys and signatures
12336 var hashType, parsed, pubKeys, signatures
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()
12350 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12351 hashType = parsed.hashType
12352 signatures = [parsed.signature]
12354 if (redeemScript) {
12355 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12362 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12363 if (chunk === ops.OP_0) return chunk
12365 var parsed = ECSignature.parseScriptSignature(chunk)
12366 hashType = parsed.hashType
12368 return parsed.signature
12371 if (redeemScript) {
12372 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12380 hashType: hashType,
12381 prevOutScript: prevOutScript,
12382 prevOutType: prevOutType,
12384 redeemScript: redeemScript,
12385 scriptType: scriptType,
12386 signatures: signatures
12390 function TransactionBuilder () {
12391 this.prevTxMap = {}
12392 this.prevOutScripts = {}
12393 this.prevOutTypes = {}
12396 this.tx = new Transaction()
12399 TransactionBuilder.fromTransaction = function (transaction) {
12400 var txb = new TransactionBuilder()
12402 // Copy other transaction fields
12403 txb.tx.version = transaction.version
12404 txb.tx.locktime = transaction.locktime
12406 // Extract/add inputs
12407 transaction.ins.forEach(function (txIn) {
12408 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12411 // Extract/add outputs
12412 transaction.outs.forEach(function (txOut) {
12413 txb.addOutput(txOut.script, txOut.value)
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')
12421 // Ignore empty scripts
12422 if (txIn.script.buffer.length ===
0) return {}
12424 return extractInput(txIn)
12430 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12434 if (typeof prevTx === 'string') {
12435 prevOutHash = new Buffer(prevTx, 'hex')
12437 // TxId hex is big-endian, we want little-endian hash
12438 Array.prototype.reverse.call(prevOutHash)
12441 } else if (prevTx instanceof Transaction) {
12442 prevOutHash = prevTx.getHash()
12443 prevOutScript = prevTx.outs[index].script
12447 prevOutHash = prevTx
12451 if (prevOutScript) {
12452 var prevOutType = scripts.classifyOutput(prevOutScript)
12454 // if we can, extract pubKey information
12455 switch (prevOutType) {
12457 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12462 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12467 if (prevOutType !== 'scripthash') {
12468 input.scriptType = prevOutType
12471 input.prevOutScript = prevOutScript
12472 input.prevOutType = prevOutType
12475 assert(this.inputs.every(function (input2) {
12476 if (input2.hashType === undefined) return true
12478 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12479 }), 'No, this would invalidate signatures')
12481 var prevOut = prevOutHash.toString('hex') + ':' + index
12482 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12484 var vin = this.tx.addInput(prevOutHash, index, sequence)
12485 this.inputs[vin] = input
12486 this.prevTxMap[prevOut] = vin
12491 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12492 assert(this.inputs.every(function (input) {
12493 if (input.hashType === undefined) return true
12495 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12496 }), 'No, this would invalidate signatures')
12498 return this.tx.addOutput(scriptPubKey, value)
12501 TransactionBuilder.prototype.build = function () {
12502 return this.__build(false)
12504 TransactionBuilder.prototype.buildIncomplete = function () {
12505 return this.__build(true)
12508 var canSignTypes = {
12509 'pubkeyhash': true,
12514 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12515 if (!allowIncomplete) {
12516 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12517 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12520 var tx = this.tx.clone()
12522 // Create script signatures from signature meta-data
12523 this.inputs.forEach(function (input, index) {
12524 var scriptType = input.scriptType
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')
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])
12542 // Array.prototype.map is sparse-compatible
12543 var msSignatures = input.signatures.map(function (signature) {
12544 return signature && signature.toScriptSignature(input.hashType)
12547 // fill in blanks with OP_0
12548 if (allowIncomplete) {
12549 for (var i =
0; i < msSignatures.length; ++i) {
12550 if (msSignatures[i]) continue
12552 msSignatures[i] = ops.OP_0
12555 // Array.prototype.filter returns non-sparse array
12556 msSignatures = msSignatures.filter(function (x) { return x })
12559 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12560 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12565 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12566 scriptSig = scripts.pubKeyInput(pkSignature)
12572 // did we build a scriptSig?
12574 // wrap as scriptHash if necessary
12575 if (input.prevOutType === 'scripthash') {
12576 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12579 tx.setInputScript(index, scriptSig)
12586 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12587 assert(index in this.inputs, 'No input at index: ' + index)
12588 hashType = hashType || Transaction.SIGHASH_ALL
12590 var input = this.inputs[index]
12591 var canSign = input.hashType &&
12592 input.prevOutScript &&
12593 input.prevOutType &&
12595 input.scriptType &&
12598 // are we almost ready to sign?
12600 // if redeemScript was provided, enforce consistency
12601 if (redeemScript) {
12602 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12605 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
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')
12615 var scriptHash = input.prevOutScript.chunks[
1]
12616 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12619 var scriptType = scripts.classifyOutput(redeemScript)
12620 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12623 switch (scriptType) {
12625 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12629 case 'pubkeyhash': {
12630 var pkh1 = redeemScript.chunks[
2]
12631 var pkh2 = privKey.pub.getAddress().hash
12633 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12634 pubKeys = [privKey.pub]
12639 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12644 if (!input.prevOutScript) {
12645 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12646 input.prevOutType = 'scripthash'
12649 input.pubKeys = pubKeys
12650 input.redeemScript = redeemScript
12651 input.scriptType = scriptType
12653 // cannot be pay-to-scriptHash
12655 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12657 // can we otherwise sign this?
12658 if (input.scriptType) {
12659 assert(input.pubKeys, input.scriptType + ' not supported')
12661 // we know nothin' Jon Snow, assume pubKeyHash
12663 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12664 input.prevOutType = 'pubkeyhash'
12665 input.pubKeys = [privKey.pub]
12666 input.scriptType = input.prevOutType
12670 input.hashType = hashType
12671 input.signatures = input.signatures || []
12674 var signatureScript = input.redeemScript || input.prevOutScript
12675 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
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()
12682 input.signatures = input.pubKeys.map(function (pubKey) {
12685 // check for any matching signatures
12686 unmatched.some(function (signature, i) {
12687 if (!pubKey.verify(signatureHash, signature)) return false
12690 // remove matched signature from unmatched
12691 unmatched.splice(i,
1)
12696 return match || undefined
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
12704 assert(!input.signatures[i], 'Signature already exists')
12705 var signature = privKey.sign(signatureHash)
12706 input.signatures[i] = signature
12709 }, this), 'privateKey cannot sign for this input')
12712 module.exports = TransactionBuilder
12714 }).call(this,require(
"buffer").Buffer)
12715 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12716 (function (Buffer){
12717 var assert = require('assert')
12718 var bufferutils = require('./bufferutils')
12719 var typeForce = require('typeforce')
12720 var networks = require('./networks')
12721 var randomBytes = require('randombytes')
12723 var Address = require('./address')
12724 var HDNode = require('./hdnode')
12725 var TransactionBuilder = require('./transaction_builder')
12726 var Script = require('./script')
12728 function Wallet (seed, network) {
12729 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12731 seed = seed || randomBytes(
32)
12732 network = network || networks.bitcoin
12734 // Stored in a closure to make accidental serialization less likely
12735 var masterKey = HDNode.fromSeedBuffer(seed, network)
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)
12743 this.addresses = []
12744 this.changeAddresses = []
12745 this.network = network
12748 // FIXME: remove in
2.0.0
12749 this.unspentMap = {}
12751 // FIXME: remove in
2.0.0
12753 this.newMasterKey = function (seed) {
12754 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12756 seed = seed || randomBytes(
32)
12757 masterKey = HDNode.fromSeedBuffer(seed, network)
12759 accountZero = masterKey.deriveHardened(
0)
12760 externalAccount = accountZero.derive(
0)
12761 internalAccount = accountZero.derive(
1)
12764 me.changeAddresses = []
12770 this.getMasterKey = function () {
12773 this.getAccountZero = function () {
12776 this.getExternalAccount = function () {
12777 return externalAccount
12779 this.getInternalAccount = function () {
12780 return internalAccount
12784 Wallet.prototype.createTransaction = function (to, value, options) {
12785 // FIXME: remove in
2.0.0
12786 if (typeof options !== 'object') {
12787 if (options !== undefined) {
12788 console.warn('Non options object parameters are deprecated, use options object instead')
12791 fixedFee: arguments[
2],
12792 changeAddress: arguments[
3]
12797 options = options || {}
12799 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
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
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
12816 var subTotal = value
12818 var txb = new TransactionBuilder()
12819 txb.addOutput(to, value)
12821 for (var i =
0; i < unspents.length; ++i) {
12822 var unspent = unspents[i]
12823 addresses.push(unspent.address)
12825 txb.addInput(unspent.txHash, unspent.index)
12827 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12829 accum += unspent.value
12830 subTotal = value + fee
12832 if (accum
>= subTotal) {
12833 var change = accum - subTotal
12835 if (change
> this.network.dustThreshold) {
12836 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12843 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12845 return this.signWith(txb, addresses).build()
12848 // FIXME: remove in
2.0.0
12849 Wallet.prototype.processPendingTx = function (tx) {
12850 this.__processTx(tx, true)
12853 // FIXME: remove in
2.0.0
12854 Wallet.prototype.processConfirmedTx = function (tx) {
12855 this.__processTx(tx, false)
12858 // FIXME: remove in
2.0.0
12859 Wallet.prototype.__processTx = function (tx, isPending) {
12860 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
12862 var txId = tx.getId()
12863 var txHash = tx.getHash()
12865 tx.outs.forEach(function (txOut, i) {
12869 address = Address.fromOutputScript(txOut.script, this.network).toString()
12871 if (!(e.message.match(/has no matching Address/)))
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
12880 // its unique, add it
12883 confirmations:
0, // no way to determine this without more information
12887 value: txOut.value,
12891 this.unspentMap[lookup] = unspent
12892 this.unspents.push(unspent)
12896 tx.ins.forEach(function (txIn) {
12897 // copy and convert to big-endian hex
12898 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12900 var lookup = txInId + ':' + txIn.index
12901 if (!(lookup in this.unspentMap)) return
12903 var unspent = this.unspentMap[lookup]
12906 unspent.pending = true
12907 unspent.spent = true
12909 delete this.unspentMap[lookup]
12911 this.unspents = this.unspents.filter(function (unspent2) {
12912 return unspent !== unspent2
12918 Wallet.prototype.generateAddress = function () {
12919 var k = this.addresses.length
12920 var address = this.getExternalAccount().derive(k).getAddress()
12922 this.addresses.push(address.toString())
12924 return this.getReceiveAddress()
12927 Wallet.prototype.generateChangeAddress = function () {
12928 var k = this.changeAddresses.length
12929 var address = this.getInternalAccount().derive(k).getAddress()
12931 this.changeAddresses.push(address.toString())
12933 return this.getChangeAddress()
12936 Wallet.prototype.getAddress = function () {
12937 if (this.addresses.length ===
0) {
12938 this.generateAddress()
12941 return this.addresses[this.addresses.length -
1]
12944 Wallet.prototype.getBalance = function (minConf) {
12945 minConf = minConf ||
0
12947 return this.unspents.filter(function (unspent) {
12948 return unspent.confirmations
>= minConf
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
12958 Wallet.prototype.getChangeAddress = function () {
12959 if (this.changeAddresses.length ===
0) {
12960 this.generateChangeAddress()
12963 return this.changeAddresses[this.changeAddresses.length -
1]
12966 Wallet.prototype.getInternalPrivateKey = function (index) {
12967 return this.getInternalAccount().derive(index).privKey
12970 Wallet.prototype.getPrivateKey = function (index) {
12971 return this.getExternalAccount().derive(index).privKey
12974 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12977 if ((index = this.addresses.indexOf(address))
> -
1) {
12978 return this.getPrivateKey(index)
12981 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
12982 return this.getInternalPrivateKey(index)
12985 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12988 Wallet.prototype.getUnspentOutputs = function (minConf) {
12989 minConf = minConf ||
0
12991 return this.unspents.filter(function (unspent) {
12992 return unspent.confirmations
>= minConf
12994 // FIXME: remove spent filter in
2.0.0
12995 }).filter(function (unspent) {
12996 return !unspent.spent
12997 }).map(function (unspent) {
12999 address: unspent.address,
13000 confirmations: unspent.confirmations,
13001 index: unspent.index,
13002 txId: unspent.txId,
13003 value: unspent.value,
13005 // FIXME: remove in
2.0.0
13006 hash: unspent.txId,
13007 pending: unspent.pending
13012 Wallet.prototype.setUnspentOutputs = function (unspents) {
13013 this.unspentMap = {}
13014 this.unspents = unspents.map(function (unspent) {
13015 // FIXME: remove unspent.hash in
2.0.0
13016 var txId = unspent.txId || unspent.hash
13017 var index = unspent.index
13019 // FIXME: remove in
2.0.0
13020 if (unspent.hash !== undefined) {
13021 console.warn('unspent.hash is deprecated, use unspent.txId instead')
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
13030 typeForce('String', txId)
13031 typeForce('Number', index)
13032 typeForce('Number', unspent.value)
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)
13040 // FIXME: remove branch in
2.0.0
13041 if (unspent.confirmations !== undefined) {
13042 typeForce('Number', unspent.confirmations)
13045 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13048 address: unspent.address,
13049 confirmations: unspent.confirmations ||
0,
13053 value: unspent.value,
13055 // FIXME: remove in
2.0.0
13056 pending: unspent.pending || false
13059 // FIXME: remove in
2.0.0
13060 this.unspentMap[txId + ':' + index] = unspent
13066 Wallet.prototype.signWith = function (tx, addresses) {
13067 addresses.forEach(function (address, i) {
13068 var privKey = this.getPrivateKeyForAddress(address)
13070 tx.sign(i, privKey)
13076 function estimatePaddedFee (tx, network) {
13077 var tmpTx = tx.clone()
13078 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13080 return network.estimateFee(tmpTx)
13083 // FIXME:
1.0.0 shims, remove in
2.0.0
13084 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13085 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13087 module.exports = Wallet
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)
13092 <script>bitcoin.networks.shadow = {
13093 magicPrefix: '\x19ShadowCash Signed Message:\n',
13095 public:
0xEE80286A,
13096 private:
0xEE8031E8
13103 estimateFee: function() { return "unused in this app" },
13106 bitcoin.networks.shadowtn = {
13107 magicPrefix: '\x19ShadowCash Signed Message:\n',
13109 public:
0x76C0FDFB,
13110 private:
0x76C1077A
13117 estimateFee: function() { return "unused in this app" },
13120 bitcoin.networks.clam = {
13122 public:
0xa8c26d64,
13123 private:
0xa8c17826
13129 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13133 /** @fileOverview Javascript cryptography implementation.
13135 * Crush to remove comments, shorten variable names and
13136 * generally reduce transmission size.
13138 * @author Emily Stark
13139 * @author Mike Hamburg
13140 * @author Dan Boneh
13144 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13145 /*global document, window, escape, unescape, module, require, Uint32Array */
13147 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13149 /** @namespace Symmetric ciphers. */
13152 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13155 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13158 /** @namespace Block cipher modes of operation. */
13161 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13165 * @namespace Bit array encoders and decoders.
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".
13175 /** @namespace Exceptions. */
13177 /** @constructor Ciphertext is corrupt. */
13178 corrupt: function(message) {
13179 this.toString = function() { return "CORRUPT: "+this.message; };
13180 this.message = message;
13183 /** @constructor Invalid parameter. */
13184 invalid: function(message) {
13185 this.toString = function() { return "INVALID: "+this.message; };
13186 this.message = message;
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;
13195 /** @constructor Something isn't ready. */
13196 notReady: function(message) {
13197 this.toString = function() { return "NOT READY: "+this.message; };
13198 this.message = message;
13203 if(typeof module !== 'undefined' && module.exports){
13204 module.exports = sjcl;
13206 if (typeof define === "function") {
13207 define([], function () {
13215 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13217 * @author Emily Stark
13218 * @author Mike Hamburg
13219 * @author Dan Boneh
13222 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13226 * These objects are the currency accepted by SJCL's crypto functions.
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.
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.
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.
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);
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.
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);
13274 // within a single word
13275 x = a[bstart/
32|
0]
>>> sh;
13277 return x & ((
1<
<blength) -
1);
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.
13286 concat: function (a1, a2) {
13287 if (a1.length ===
0 || a2.length ===
0) {
13288 return a1.concat(a2);
13291 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13292 if (shift ===
32) {
13293 return a1.concat(a2);
13295 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13300 * Find the length of an array of bits.
13301 * @param {bitArray} a The array.
13302 * @return {Number} The length of a, in bits.
13304 bitLength: function (a) {
13305 var l = a.length, x;
13306 if (l ===
0) { return
0; }
13308 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
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.
13317 clamp: function (a, len) {
13318 if (a.length *
32 < len) { return a; }
13319 a = a.slice(
0, Math.ceil(len /
32));
13322 if (l
> 0 && len) {
13323 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
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.
13335 partial: function (len, x, _end) {
13336 if (len ===
32) { return x; }
13337 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
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.
13345 getPartial: function (x) {
13346 return Math.round(x/
0x10000000000) ||
32;
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.
13355 equal: function (a, b) {
13356 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13360 for (i=
0; i
<a.length; i++) {
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.
13373 _shiftRight: function (a, shift, carry, out) {
13374 var i, last2=
0, shift2;
13375 if (out === undefined) { out = []; }
13377 for (; shift
>=
32; shift -=
32) {
13382 return out.concat(a);
13385 for (i=
0; i
<a.length; i++) {
13386 out.push(carry | a[i]
>>>shift);
13387 carry = a[i] << (
32-shift);
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));
13395 /** xor a block of
4 words together.
13398 _xor4: function(x,y) {
13399 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
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
13407 byteswapM: function(a) {
13408 var i, v, m =
0xff00;
13409 for (i =
0; i < a.length; ++i) {
13411 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13418 //// codecString.js
13420 /** @fileOverview Bit array codec implementations.
13422 * @author Emily Stark
13423 * @author Mike Hamburg
13424 * @author Dan Boneh
13427 /** @namespace UTF-
8 strings */
13428 sjcl.codec.utf8String = {
13429 /** Convert from a bitArray to a UTF-
8 string. */
13430 fromBits: function (arr) {
13431 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13432 for (i=
0; i
<bl/
8; i++) {
13436 out += String.fromCharCode(tmp
>>> 24);
13439 return decodeURIComponent(escape(out));
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);
13454 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13463 /** @fileOverview Bit array codec implementations.
13465 * @author Emily Stark
13466 * @author Mike Hamburg
13467 * @author Dan Boneh
13470 /** @namespace Hexadecimal */
13472 /** Convert from a bitArray to a hex string. */
13473 fromBits: function (arr) {
13475 for (i=
0; i
<arr.length; i++) {
13476 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13478 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
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,
"");
13485 str = str +
"00000000";
13486 for (i=
0; i
<str.length; i+=
8) {
13487 out.push(parseInt(str.substr(i,
8),
16)^
0);
13489 return sjcl.bitArray.clamp(out, len*
4);
13496 /** @fileOverview Javascript SHA-
512 implementation.
13498 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13499 * SJCL by Stefan Thomas.
13501 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13502 * Released with New BSD License
13504 * @author Emily Stark
13505 * @author Mike Hamburg
13506 * @author Dan Boneh
13507 * @author Jeff Mott
13508 * @author Stefan Thomas
13512 * Context for a SHA-
512 operation in progress.
13514 * @class Secure Hash Algorithm,
512 bits.
13516 sjcl.hash.sha512 = function (hash) {
13517 if (!this._key[
0]) { this._precompute(); }
13519 this._h = hash._h.slice(
0);
13520 this._buffer = hash._buffer.slice(
0);
13521 this._length = hash._length;
13528 * Hash a string or an array of words.
13530 * @param {bitArray|String} data the data to hash.
13531 * @return {bitArray} The hash value, an array of
16 big-endian words.
13533 sjcl.hash.sha512.hash = function (data) {
13534 return (new sjcl.hash.sha512()).update(data).finalize();
13537 sjcl.hash.sha512.prototype = {
13539 * The hash's block size, in bits.
13545 * Reset the hash state.
13548 reset:function () {
13549 this._h = this._init.slice(
0);
13556 * Input several words to the hash.
13557 * @param {bitArray|String} data the data to hash.
13560 update: function (data) {
13561 if (typeof data ===
"string") {
13562 data = sjcl.codec.utf8String.toBits(data);
13564 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
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));
13574 * Complete hashing and output the hash value.
13575 * @return {bitArray} The hash value, an array of
16 big-endian words.
13577 finalize:function () {
13578 var i, b = this._buffer, h = this._h;
13580 // Round out and push the buffer
13581 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
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++) {
13588 // append the length
13591 b.push(Math.floor(this._length /
0x100000000));
13592 b.push(this._length |
0);
13595 this._block(b.splice(
0,
32));
13603 * The SHA-
512 initialization vector, to be precomputed.
13609 * Least significant
24 bits of SHA512 initialization values.
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.
13616 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13620 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13621 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13625 * The SHA-
512 hash key, to be precomputed.
13631 * Least significant
24 bits of SHA512 key values.
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],
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],
13671 * Function to precompute _init and _key.
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;
13679 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13680 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13682 outer: for (; i
<80; prime++) {
13683 for (factor=
2; factor*factor <= prime; factor++) {
13684 if (prime % factor ===
0) {
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];
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];
13701 * Perform one cycle of SHA-
512.
13702 * @param {bitArray} words one block of words.
13705 _block:function (words) {
13707 w = words.slice(
0),
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];
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;
13721 for (i=
0; i
<80; i++) {
13722 // load up the input word for this round
13725 wrl = w[i *
2 +
1];
13728 var gamma0xh = w[(i-
15) *
2];
13729 var gamma0xl = w[(i-
15) *
2 +
1];
13731 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
13732 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
13735 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
13736 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
13737 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
13740 var gamma1xh = w[(i-
2) *
2];
13741 var gamma1xl = w[(i-
2) *
2 +
1];
13743 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
13744 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
13747 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
13748 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
13749 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
13752 var wr7h = w[(i-
7) *
2];
13753 var wr7l = w[(i-
7) *
2 +
1];
13755 var wr16h = w[(i-
16) *
2];
13756 var wr16l = w[(i-
16) *
2 +
1];
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);
13762 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
13764 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
13768 w[i*
2 +
1] = wrl |=
0;
13771 var chh = (eh & fh) ^ (~eh & gh);
13772 var chl = (el & fl) ^ (~el & gl);
13775 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13776 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
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));
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));
13788 var krl = k[i*
2+
1];
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);
13794 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
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);
13800 // t2 = sigma0 + maj
13801 var t2l = sigma0l + majl;
13802 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
13804 // Update working variables
13811 el = (dl + t1l) |
0;
13812 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13819 al = (t1l + t2l) |
0;
13820 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
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;
13846 /** @fileOverview HMAC implementation.
13848 * @author Emily Stark
13849 * @author Mike Hamburg
13850 * @author Dan Boneh
13853 /** HMAC with the specified hash function.
13855 * @param {bitArray} key the key for HMAC.
13856 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13858 sjcl.misc.hmac = function (key, Hash) {
13859 this._hash = Hash = Hash || sjcl.hash.sha256;
13860 var exKey = [[],[]], i,
13861 bs = Hash.prototype.blockSize /
32;
13862 this._baseHash = [new Hash(), new Hash()];
13864 if (key.length
> bs) {
13865 key = Hash.hash(key);
13868 for (i=
0; i
<bs; i++) {
13869 exKey[
0][i] = key[i]^
0x36363636;
13870 exKey[
1][i] = key[i]^
0x5C5C5C5C;
13873 this._baseHash[
0].update(exKey[
0]);
13874 this._baseHash[
1].update(exKey[
1]);
13875 this._resultHash = new Hash(this._baseHash[
0]);
13878 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13879 * @param {bitArray|String} data The data to mac.
13881 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13882 if (!this._updated) {
13884 return this.digest(data);
13886 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
13890 sjcl.misc.hmac.prototype.reset = function () {
13891 this._resultHash = new this._hash(this._baseHash[
0]);
13892 this._updated = false;
13895 sjcl.misc.hmac.prototype.update = function (data) {
13896 this._updated = true;
13897 this._resultHash.update(data);
13900 sjcl.misc.hmac.prototype.digest = function () {
13901 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
13912 /** @fileOverview Password-based key-derivation function, version
2.0.
13914 * @author Emily Stark
13915 * @author Mike Hamburg
13916 * @author Dan Boneh
13919 /** Password-Based Key-Derivation Function, version
2.0.
13921 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13923 * This is the method specified by RSA's PKCS #
5 standard.
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.
13933 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13934 count = count ||
1000;
13936 if (length <
0 || count <
0) {
13937 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
13940 if (typeof password ===
"string") {
13941 password = sjcl.codec.utf8String.toBits(password);
13944 if (typeof salt ===
"string") {
13945 salt = sjcl.codec.utf8String.toBits(salt);
13948 Prff = Prff || sjcl.misc.hmac;
13950 var prf = new Prff(password),
13951 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13953 for (k =
1;
32 * out.length < (length ||
1); k++) {
13954 u = ui = prf.encrypt(b.concat(salt,[k]));
13956 for (i=
1; i
<count; i++) {
13957 ui = prf.encrypt(ui);
13958 for (j=
0; j
<ui.length; j++) {
13963 out = out.concat(u);
13966 if (length) { out = b.clamp(out, length); }
13974 /** @fileOverview Javascript SHA-
256 implementation.
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
13981 * Special thanks to Aldo Cortesi for pointing out several bugs in
13984 * @author Emily Stark
13985 * @author Mike Hamburg
13986 * @author Dan Boneh
13990 * Context for a SHA-
256 operation in progress.
13992 * @class Secure Hash Algorithm,
256 bits.
13994 sjcl.hash.sha256 = function (hash) {
13995 if (!this._key[
0]) { this._precompute(); }
13997 this._h = hash._h.slice(
0);
13998 this._buffer = hash._buffer.slice(
0);
13999 this._length = hash._length;
14006 * Hash a string or an array of words.
14008 * @param {bitArray|String} data the data to hash.
14009 * @return {bitArray} The hash value, an array of
16 big-endian words.
14011 sjcl.hash.sha256.hash = function (data) {
14012 return (new sjcl.hash.sha256()).update(data).finalize();
14015 sjcl.hash.sha256.prototype = {
14017 * The hash's block size, in bits.
14023 * Reset the hash state.
14026 reset:function () {
14027 this._h = this._init.slice(
0);
14034 * Input several words to the hash.
14035 * @param {bitArray|String} data the data to hash.
14038 update: function (data) {
14039 if (typeof data ===
"string") {
14040 data = sjcl.codec.utf8String.toBits(data);
14042 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
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));
14052 * Complete hashing and output the hash value.
14053 * @return {bitArray} The hash value, an array of
8 big-endian words.
14055 finalize:function () {
14056 var i, b = this._buffer, h = this._h;
14058 // Round out and push the buffer
14059 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
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++) {
14066 // append the length
14067 b.push(Math.floor(this._length /
0x100000000));
14068 b.push(this._length |
0);
14071 this._block(b.splice(
0,
16));
14079 * The SHA-
256 initialization vector, to be precomputed.
14084 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14088 * The SHA-
256 hash key, to be precomputed.
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],
14106 * Function to precompute _init and _key.
14109 _precompute: function () {
14110 var i =
0, prime =
2, factor;
14112 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14114 outer: for (; i
<64; prime++) {
14115 for (factor=
2; factor*factor <= prime; factor++) {
14116 if (prime % factor ===
0) {
14123 this._init[i] = frac(Math.pow(prime,
1/
2));
14125 this._key[i] = frac(Math.pow(prime,
1/
3));
14131 * Perform one cycle of SHA-
256.
14132 * @param {bitArray} words one block of words.
14135 _block:function (words) {
14137 w = words.slice(
0),
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];
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.
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.
14153 * The clamps on h[] are necessary for the output to be correct even in the
14154 * common case and for short inputs.
14156 for (i=
0; i
<64; i++) {
14157 // load up the input word for this round
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;
14168 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14171 h7 = h6; h6 = h5; h5 = h4;
14173 h3 = h2; h2 = h1; h1 = h0;
14175 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
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;
14189 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14190 WORDLISTS["english"] = [
14191 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14192 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14193 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14194 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14195 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14196 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14197 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14198 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14199 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14200 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14201 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14202 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14203 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14204 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14205 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14206 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14207 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14208 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14209 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14210 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14211 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14212 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14213 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14214 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14215 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14216 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14217 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14218 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14219 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14220 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14221 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14222 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14223 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14224 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14225 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14226 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14227 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14228 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14229 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14230 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14231 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14232 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14233 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14234 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14235 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14236 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14237 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14238 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14239 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14240 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14241 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14242 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14243 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14244 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14245 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14246 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14247 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14248 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14249 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14250 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14251 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14252 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14253 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14254 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14255 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14256 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14257 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14258 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14259 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14260 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14261 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14262 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14263 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14264 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14265 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14266 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14267 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14268 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14269 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14270 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14271 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14272 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14273 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14274 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14275 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14276 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14277 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14278 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14279 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14280 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14281 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14282 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14283 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14284 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14285 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14286 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14287 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14288 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14289 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14290 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14291 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14292 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14293 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14294 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14295 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14296 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14297 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14298 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14299 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14300 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14301 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14302 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14303 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14304 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14305 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14306 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14307 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14308 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14309 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14310 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14311 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14312 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14313 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14314 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14315 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14316 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14317 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14318 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14319 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14320 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14321 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14322 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14323 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14324 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14325 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14326 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14327 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14328 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14329 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14330 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14331 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14332 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14333 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14334 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14335 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14336 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14337 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14338 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14339 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14340 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14341 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14342 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14343 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14344 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14345 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14346 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14347 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14348 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14349 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14350 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14351 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14352 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14353 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14354 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14355 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14356 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14357 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14358 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14359 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14360 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14361 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14362 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14363 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14364 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14365 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14366 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14367 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14368 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14369 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14370 "thank","that","theme","then","theory","there","they","thing","this","thought",
14371 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14372 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14373 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14374 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14375 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14376 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14377 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14378 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14379 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14380 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14381 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14382 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14383 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14384 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14385 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14386 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14387 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14388 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14389 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14390 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14391 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14392 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14393 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14394 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14395 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14398 * Copyright (c)
2013 Pavol Rusnak
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:
14407 * The above copyright notice and this permission notice shall be included in all
14408 * copies or substantial portions of the Software.
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.
14419 * Javascript port from python by Ian Coleman
14421 * Requires code from sjcl
14422 * https://github.com/bitwiseshiftleft/sjcl
14425 var Mnemonic = function(language) {
14427 var PBKDF2_ROUNDS =
2048;
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);
14441 wordlist = WORDLISTS[language];
14442 if (wordlist.length != RADIX) {
14443 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14448 self.generate = function(strength) {
14449 strength = strength ||
128;
14450 var r = strength %
32;
14452 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
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';
14458 var buffer = new Uint8Array(strength /
8);
14459 var data = crypto.getRandomValues(buffer);
14460 return self.toMnemonic(data);
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).'
14468 //h = hashlib.sha256(data).hexdigest()
14469 var data = byteArrayToWordArray(byteArray);
14470 var hash = sjcl.hash.sha256.hash(data);
14471 var h = sjcl.codec.hex.fromBits(hash);
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]
14477 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14478 // c = bin(int(h,
16))[
2:].zfill(
256)
14479 // d = c[:len(data) *
8 /
32]
14480 var a = byteArrayToBinaryString(byteArray);
14481 var c = zfill(hexStringToBinaryString(h),
256);
14482 var d = c.substring(
0, byteArray.length *
8 /
32);
14483 // b = line1 + line2
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]);
14492 return result.join(' ');
14495 self.check = function(mnemonic) {
14496 var mnemonic = mnemonic.split(' ')
14497 if (mnemonic.length %
3 > 0) {
14500 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14502 for (var i=
0; i
<mnemonic.length; i++) {
14503 var word = mnemonic[i];
14504 var wordIndex = wordlist.indexOf(word);
14505 if (wordIndex == -
1) {
14508 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14509 idx.push(binaryIndex);
14511 var b = idx.join('');
14513 //d = b[:l /
33 *
32]
14515 var d = b.substring(
0, l /
33 *
32);
14516 var h = b.substring(l - l /
33, l);
14517 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14518 var nd = binaryStringToWordArray(d);
14519 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14520 var ndHash = sjcl.hash.sha256.hash(nd);
14521 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14522 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14523 var nh = ndBstr.substring(
0,l/
33);
14527 self.toSeed = function(mnemonic, passphrase) {
14528 passphrase = passphrase || '';
14529 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14530 passphrase = self.normalizeString(passphrase)
14531 passphrase =
"mnemonic" + passphrase;
14532 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14533 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14534 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14535 var hashHex = sjcl.codec.hex.fromBits(result);
14539 self.normalizeString = function(str) {
14540 if (typeof str.normalize ==
"function") {
14541 return str.normalize(
"NFKD");
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
14550 function byteArrayToWordArray(data) {
14552 for (var i=
0; i
<data.length/
4; i++) {
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;
14563 function byteArrayToBinaryString(data) {
14565 for (var i=
0; i
<data.length; i++) {
14566 bin += zfill(data[i].toString(
2),
8);
14571 function hexStringToBinaryString(hexString) {
14573 for (var i=
0; i
<hexString.length; i++) {
14574 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14576 return binaryString;
14579 function binaryStringToWordArray(binary) {
14580 var aLen = binary.length /
32;
14582 for (var i=
0; i
<aLen; i++) {
14583 var valueStr = binary.substring(
0,
32);
14584 var value = parseInt(valueStr,
2);
14586 binary = binary.slice(
32);
14591 // Pad a numeric string on the left with zero digits until the given width
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;
14607 <script>(function() {
14609 var mnemonic = new Mnemonic("english");
14611 var bip32RootKey = null;
14612 var bip32ExtendedKey = null;
14613 var network = bitcoin.networks.bitcoin;
14614 var addressRowTemplate = $("#address-row-template");
14616 var showIndex = true;
14617 var showAddress = true;
14618 var showPrivKey = true;
14620 var phraseChangeTimeoutEvent = null;
14623 DOM.network = $(".network");
14624 DOM.phraseNetwork = $("#network-phrase");
14625 DOM.phrase = $(".phrase");
14626 DOM.passphrase = $(".passphrase");
14627 DOM.generate = $(".generate");
14628 DOM.seed = $(".seed");
14629 DOM.rootKey = $(".root-key");
14630 DOM.extendedPrivKey = $(".extended-priv-key");
14631 DOM.extendedPubKey = $(".extended-pub-key");
14632 DOM.bip32tab = $("#bip32-tab");
14633 DOM.bip44tab = $("#bip44-tab");
14634 DOM.bip32panel = $("#bip32");
14635 DOM.bip44panel = $("#bip44");
14636 DOM.bip32path = $("#bip32-path");
14637 DOM.bip44path = $("#bip44-path");
14638 DOM.bip44purpose = $("#bip44 .purpose");
14639 DOM.bip44coin = $("#bip44 .coin");
14640 DOM.bip44account = $("#bip44 .account");
14641 DOM.bip44change = $("#bip44 .change");
14642 DOM.strength = $(".strength");
14643 DOM.addresses = $(".addresses");
14644 DOM.rowsToAdd = $(".rows-to-add");
14645 DOM.more = $(".more");
14646 DOM.feedback = $(".feedback");
14647 DOM.tab = $(".derivation-type a");
14648 DOM.indexToggle = $(".index-toggle");
14649 DOM.addressToggle = $(".address-toggle");
14650 DOM.privateKeyToggle = $(".private-key-toggle");
14652 var derivationPath = $(".tab-pane.active .path").val();
14656 DOM.network.on("change", networkChanged);
14657 DOM.phrase.on("input", delayedPhraseChanged);
14658 DOM.passphrase.on("input", delayedPhraseChanged);
14659 DOM.generate.on("click", generateClicked);
14660 DOM.more.on("click", showMore);
14661 DOM.bip32path.on("input", bip32Changed);
14662 DOM.bip44purpose.on("input", bip44Changed);
14663 DOM.bip44coin.on("input", bip44Changed);
14664 DOM.bip44account.on("input", bip44Changed);
14665 DOM.bip44change.on("input", bip44Changed);
14666 DOM.tab.on("click", tabClicked);
14667 DOM.indexToggle.on("click", toggleIndexes);
14668 DOM.addressToggle.on("click", toggleAddresses);
14669 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14672 hideValidationError();
14673 populateNetworkSelect();
14678 function networkChanged(e) {
14679 var network = e.target.value;
14680 networks[network].onSelect();
14681 delayedPhraseChanged();
14684 function delayedPhraseChanged() {
14685 hideValidationError();
14687 if (phraseChangeTimeoutEvent != null) {
14688 clearTimeout(phraseChangeTimeoutEvent);
14690 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14693 function phraseChanged() {
14695 hideValidationError();
14696 // Get the mnemonic phrase
14697 var phrase = DOM.phrase.val();
14698 var passphrase = DOM.passphrase.val();
14699 var errorText = findPhraseErrors(phrase);
14701 showValidationError(errorText);
14704 // Get the derivation path
14705 var errorText = findDerivationPathErrors();
14707 showValidationError(errorText);
14710 // Calculate and display
14711 calcBip32Seed(phrase, passphrase, derivationPath);
14712 displayBip32Info();
14716 function generateClicked() {
14719 setTimeout(function() {
14720 var phrase = generateRandomPhrase();
14728 function tabClicked(e) {
14729 var activePath = $(e.target.getAttribute("href") + " .path");
14730 derivationPath = activePath.val();
14731 derivationChanged();
14734 function derivationChanged() {
14735 delayedPhraseChanged();
14738 function bip32Changed() {
14739 derivationPath = DOM.bip32path.val();
14740 derivationChanged();
14743 function bip44Changed() {
14744 setBip44DerivationPath();
14745 derivationChanged();
14748 function toggleIndexes() {
14749 showIndex = !showIndex;
14750 $("td.index span").toggleClass("invisible");
14753 function toggleAddresses() {
14754 showAddress = !showAddress;
14755 $("td.address span").toggleClass("invisible");
14758 function togglePrivateKeys() {
14759 showPrivKey = !showPrivKey;
14760 $("td.privkey span").toggleClass("invisible");
14765 function generateRandomPhrase() {
14766 if (!hasStrongRandom()) {
14767 var errorText = "This browser does not support strong randomness";
14768 showValidationError(errorText);
14771 var numWords = parseInt(DOM.strength.val());
14772 var strength = numWords /
3 *
32;
14773 var words = mnemonic.generate(strength);
14774 DOM.phrase.val(words);
14778 function calcBip32Seed(phrase, passphrase, path) {
14779 seed = mnemonic.toSeed(phrase, passphrase);
14780 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14781 bip32ExtendedKey = bip32RootKey;
14782 // Derive the key from the path
14783 var pathBits = path.split("/");
14784 for (var i=
0; i
<pathBits.length; i++) {
14785 var bit = pathBits[i];
14786 var index = parseInt(bit);
14787 if (isNaN(index)) {
14790 var hardened = bit[bit.length-
1] ==
"'";
14792 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14795 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14800 function showValidationError(errorText) {
14806 function hideValidationError() {
14812 function findPhraseErrors(phrase) {
14813 // TODO make this right
14814 // Preprocess the words
14815 phrase = mnemonic.normalizeString(phrase);
14816 var parts = phrase.split(
" ");
14818 for (var i=
0; i
<parts.length; i++) {
14819 var part = parts[i];
14820 if (part.length
> 0) {
14821 // TODO check that lowercasing is always valid to do
14822 proper.push(part.toLowerCase());
14825 // TODO some levenstein on the words
14826 var properPhrase = proper.join(' ');
14827 // Check the words are valid
14828 var isValid = mnemonic.check(properPhrase);
14830 return
"Invalid mnemonic";
14835 function findDerivationPathErrors(path) {
14840 function displayBip32Info() {
14842 DOM.seed.val(seed);
14843 var rootKey = bip32RootKey.toBase58();
14844 DOM.rootKey.val(rootKey);
14845 var extendedPrivKey = bip32ExtendedKey.toBase58();
14846 DOM.extendedPrivKey.val(extendedPrivKey);
14847 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14848 DOM.extendedPubKey.val(extendedPubKey);
14849 // Display the addresses and privkeys
14850 clearAddressesList();
14851 displayAddresses(
0,
20);
14854 function displayAddresses(start, total) {
14855 for (var i=
0; i
<total; i++) {
14856 var index = i + start;
14857 new TableRow(index);
14861 function TableRow(index) {
14867 function calculateValues() {
14868 setTimeout(function() {
14869 var key = bip32ExtendedKey.derive(index);
14870 var address = key.getAddress().toString();
14871 var privkey = key.privKey.toWIF(network);
14872 addAddressToList(index, address, privkey);
14880 function showMore() {
14881 var start = DOM.addresses.children().length;
14882 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14883 if (isNaN(rowsToAdd)) {
14885 DOM.rowsToAdd.val(
"20");
14887 if (rowsToAdd
> 200) {
14888 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
14889 msg +=
"Do you want to continue?";
14890 if (!confirm(msg)) {
14894 displayAddresses(start, rowsToAdd);
14897 function clearDisplay() {
14898 clearAddressesList();
14900 hideValidationError();
14903 function clearAddressesList() {
14904 DOM.addresses.empty();
14907 function clearKey() {
14908 DOM.rootKey.val(
"");
14909 DOM.extendedPrivKey.val(
"");
14910 DOM.extendedPubKey.val(
"");
14913 function addAddressToList(index, address, privkey) {
14914 var row = $(addressRowTemplate.html());
14916 var indexCell = row.find(
".index span");
14917 var addressCell = row.find(
".address span");
14918 var privkeyCell = row.find(
".privkey span");
14920 var indexText = derivationPath +
"/" + index;
14921 indexCell.text(indexText);
14922 addressCell.text(address);
14923 privkeyCell.text(privkey);
14926 indexCell.addClass(
"invisible");
14928 if (!showAddress) {
14929 addressCell.addClass(
"invisible");
14931 if (!showPrivKey) {
14932 privkeyCell.addClass(
"invisible");
14934 DOM.addresses.append(row);
14937 function hasStrongRandom() {
14938 return 'crypto' in window && window['crypto'] !== null;
14941 function disableForms() {
14942 $(
"form").on(
"submit", function(e) {
14943 e.preventDefault();
14947 function setBip44DerivationPath() {
14948 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
14949 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
14950 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
14951 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
14953 path += purpose +
"'/";
14954 path += coin +
"'/";
14955 path += account +
"'/";
14957 DOM.bip44path.val(path);
14958 derivationPath = DOM.bip44path.val();
14961 function parseIntNoNaN(val, defaultVal) {
14962 var v = parseInt(val);
14969 function showPending() {
14971 .text(
"Calculating...")
14975 function hidePending() {
14981 function populateNetworkSelect() {
14982 for (var i=
0; i
<networks.length; i++) {
14983 var network = networks[i];
14984 var option = $(
"<option>");
14985 option.attr(
"value", i);
14986 option.text(network.name);
14987 DOM.phraseNetwork.append(option);
14994 onSelect: function() {
14995 network = bitcoin.networks.bitcoin;
14996 DOM.bip44coin.val(
0);
15000 name:
"Bitcoin Testnet",
15001 onSelect: function() {
15002 network = bitcoin.networks.testnet;
15003 DOM.bip44coin.val(
1);
15008 onSelect: function() {
15009 network = bitcoin.networks.litecoin;
15010 DOM.bip44coin.val(
2);
15015 onSelect: function() {
15016 network = bitcoin.networks.dogecoin;
15017 DOM.bip44coin.val(
3);
15021 name:
"ShadowCash",
15022 onSelect: function() {
15023 network = bitcoin.networks.shadow;
15024 DOM.bip44coin.val(
35);
15028 name:
"ShadowCash Testnet",
15029 onSelect: function() {
15030 network = bitcoin.networks.shadowtn;
15031 DOM.bip44coin.val(
1);
15036 onSelect: function() {
15037 network = bitcoin.networks.viacoin;
15038 DOM.bip44coin.val(
14);
15042 name:
"Viacoin Testnet",
15043 onSelect: function() {
15044 network = bitcoin.networks.viacointestnet;
15045 DOM.bip44coin.val(
1);
15050 onSelect: function() {
15051 network = bitcoin.networks.jumbucks;
15052 DOM.bip44coin.val(
26);
15057 onSelect: function() {
15058 network = bitcoin.networks.clam;
15059 DOM.bip44coin.val(
23);