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=
"Ian Coleman" 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);
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
59 font-family: monospace;
64 <div class=
"container">
66 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
69 <div class=
"col-md-12">
71 <form class=
"form-horizontal" role=
"form">
72 <div class=
"form-group">
73 <div class=
"col-sm-2"></div>
74 <div class=
"col-sm-10">
75 <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>
76 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
79 <div class=
"form-group generate-container">
80 <label class=
"col-sm-2 control-label"></label>
81 <div class=
"col-sm-10">
82 <div class=
"form-inline">
83 <div class=
"input-group-inline">
84 <button class=
"btn generate">Generate
</button>
86 <select id=
"strength" class=
"strength form-control">
87 <option value=
"3">3</option>
88 <option value=
"6">6</option>
89 <option value=
"9">9</option>
90 <option value=
"12">12</option>
91 <option value=
"15" selected
>15</option>
92 <option value=
"18">18</option>
93 <option value=
"21">21</option>
94 <option value=
"24">24</option>
96 word mnemonic, or enter your own below.
101 <div class=
"entropy-container hidden">
102 <label for=
"entropy" class=
"col-sm-2 control-label">Entropy
</label>
103 <div class=
"col-sm-10">
104 <input id=
"entropy" class=
"entropy form-control" placeholder=
"Accepts binary, base 6, 6-sided dice, base 10, hexadecimal">
105 <span class=
"help-block">
106 <div class=
"text-danger">
107 This is an advanced feature.
108 Your mnemonic may be insecure if this feature is used incorrectly.
109 <a href=
"#entropy-notes">Read more
</a>
111 <div class=
"text-danger entropy-error"></div>
115 <div class=
"form-group">
116 <div class=
"col-sm-2"></div>
117 <div class=
"col-sm-10 checkbox">
119 <input type=
"checkbox" class=
"use-entropy">
120 Supply my own source of entropy
124 <div class=
"form-group">
125 <label class=
"col-sm-2 control-label"></label>
126 <div class=
"col-sm-10 languages">
127 <a href=
"#english">English
</a>
128 <a href=
"#japanese" title=
"Japanese">日本語
</a>
129 <a href=
"#spanish" title=
"Spanish">Español
</a>
130 <a href=
"#chinese_simplified" title=
"Chinese (Simplified)">中文(简体)
</a>
131 <a href=
"#chinese_traditional" title=
"Chinese (Traditional)">中文(繁體)
</a>
132 <a href=
"#french" title=
"French">Français
</a>
133 <a href=
"#italian" title=
"Italian">Italiano
</a>
136 <div class=
"form-group">
137 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
138 <div class=
"col-sm-10">
139 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
142 <div class=
"form-group">
143 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
144 <div class=
"col-sm-10">
145 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
148 <div class=
"form-group">
149 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
150 <div class=
"col-sm-10">
151 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
154 <div class=
"form-group">
155 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
156 <div class=
"col-sm-10">
157 <select id=
"network-phrase" class=
"network form-control">
158 <!-- populated by javascript -->
162 <div class=
"form-group">
163 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
164 <div class=
"col-sm-10">
165 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
175 <div class=
"col-md-12">
176 <h2>Derivation Path
</h2>
177 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
178 <li id=
"bip44-tab" class=
"active">
179 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
182 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
185 <div class=
"derivation-type tab-content">
186 <div id=
"bip44" class=
"tab-pane active">
187 <form class=
"form-horizontal" role=
"form">
189 <div class=
"col-sm-2"></div>
190 <div class=
"col-sm-10">
191 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
193 <div class=
"form-group">
194 <label for=
"purpose" class=
"col-sm-2 control-label">
195 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
197 <div class=
"col-sm-10">
198 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
201 <div class=
"form-group">
202 <label for=
"coin" class=
"col-sm-2 control-label">
203 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
205 <div class=
"col-sm-10">
206 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
209 <div class=
"form-group">
210 <label for=
"account" class=
"col-sm-2 control-label">
211 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
213 <div class=
"col-sm-10">
214 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
217 <div class=
"form-group">
218 <label for=
"change" class=
"col-sm-2 control-label">
219 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
221 <div class=
"col-sm-10">
222 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
225 <div class=
"form-group">
226 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
227 <div class=
"col-sm-10">
228 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
233 <div id=
"bip32" class=
"tab-pane">
234 <form class=
"form-horizontal" role=
"form">
236 <div class=
"col-sm-2"></div>
237 <div class=
"col-sm-10">
238 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
240 <div class=
"form-group">
241 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
242 <div class=
"col-sm-10">
243 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
246 <div class=
"form-group">
247 <div class=
"col-sm-2"></div>
248 <label class=
"col-sm-10">
249 <input class=
"hardened-addresses" type=
"checkbox">
250 Use hardened addresses
253 <div class=
"form-group">
254 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
255 <div class=
"col-sm-10">
256 <p class=
"form-control no-border">
257 Use path
<code>m/
0'/
0</code>.
258 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
262 <div class=
"form-group">
263 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
264 <div class=
"col-sm-10">
265 <p class=
"form-control no-border">
266 Use path
<code>m/
44'/
0'/
0'/
0</code>.
267 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
271 <div class=
"form-group">
272 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
273 <div class=
"col-sm-10">
274 <p class=
"form-control no-border">
275 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
276 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
280 <div class=
"form-group">
281 <label class=
"col-sm-2 control-label">Block Explorers
</label>
282 <div class=
"col-sm-10">
283 <p class=
"form-control no-border">
284 Use path
<code>m/
44'/
0'/
0'
</code>.
285 Only enter the
<code>xpub
</code> extended key into block explorer search fields, never the
<code>xpriv
</code> key.
292 <form class=
"form-horizontal" role=
"form">
293 <div class=
"form-group">
294 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
295 <div class=
"col-sm-10">
296 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
299 <div class=
"form-group">
300 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
301 <div class=
"col-sm-10">
302 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
312 <div class=
"col-md-12">
313 <h2>Derived Addresses
</h2>
314 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
315 <table class=
"table table-striped">
318 <div class=
"input-group">
320 <button class=
"index-toggle">Toggle
</button>
324 <div class=
"input-group">
326 <button class=
"address-toggle">Toggle
</button>
330 <div class=
"input-group">
331 Public Key
332 <button class=
"public-key-toggle">Toggle
</button>
336 <div class=
"input-group">
337 Private Key
338 <button class=
"private-key-toggle">Toggle
</button>
342 <tbody class=
"addresses monospace">
343 <tr><td> </td><td> </td><td> </td></tr>
344 <tr><td> </td><td> </td><td> </td></tr>
345 <tr><td> </td><td> </td><td> </td></tr>
346 <tr><td> </td><td> </td><td> </td></tr>
347 <tr><td> </td><td> </td><td> </td></tr>
352 <span>Show next
</button>
353 <input type=
"number" class=
"rows-to-add" value=
"20">
354 <button class=
"more">Show
</button>
359 <div class=
"col-md-12">
361 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
364 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
366 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
369 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
371 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
373 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
376 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
378 <h3>Private Keys
</h3>
381 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
382 but be careful - it can be easy to make mistakes if you
383 don't know what you're doing
385 <h3 id=
"entropy-notes">Entropy
</h3>
387 Entropy values must be sourced from a
388 <a href=
"https://en.wikipedia.org/wiki/Random_number_generation" target=
"_blank">strong source of randomness
</a>.
389 This means flipping a fair coin, rolling a fair dice, noise measurements etc. Do
<strong>NOT
</strong> use
390 phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you
<i>think
</i>
391 is random, because chances are
<em>overwhelming
</em> that it isn't random enough for the needs of this tool.
394 The random mnemonic generator on this page uses a
395 <a href=
"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target=
"_blank">cryptographically secure random number generator
</a>,
396 and can generally be trusted more than your own intuition about randomness.
397 If cryptographic randomness isn't available in your browser, this page will show a warning and
<i>will not generate
398 random mnemonics
</i>.
401 <a href=
"https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target=
"_blank">You are not a good source of entropy.
</a>
409 <div class=
"col-md-12">
411 <h2>Offline Usage
</h2>
414 You can use this tool without having to be online.
417 In your browser, select file save-as, and save this page
421 Double-click that file to open it in a browser
422 on any offline computer.
425 Alternatively, download it from
426 <a href=
"https://github.com/iancoleman/bip39">
427 https://github.com/iancoleman/bip39
436 <div class=
"col-md-12">
438 <h2>This project is
100% open-source code
</h2>
441 <span>Get the source code at -
</span>
442 <a href=
"https://github.com/iancoleman/bip39" target=
"_blank">
443 https://github.com/iancoleman/bip39
450 <span>BitcoinJS -
</span>
451 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
452 https://github.com/bitcoinjs/bitcoinjs-lib
457 <span>jsBIP39 -
</span>
458 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
459 https://github.com/iancoleman/jsbip39
465 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
466 https://github.com/bitwiseshiftleft/sjcl
471 <span>jQuery -
</span>
472 <a href=
"https://jquery.com/" target=
"_blank">
478 <span>Twitter Bootstrap -
</span>
479 <a href=
"http://getbootstrap.com/" target=
"_blank">
480 http://getbootstrap.com/
489 <div class=
"feedback-container">
490 <div class=
"feedback">Loading...
</div>
493 <script type=
"text/template" id=
"address-row-template">
495 <td class=
"index"><span></span></td>
496 <td class=
"address"><span></span></td>
497 <td class=
"pubkey"><span></span></td>
498 <td class=
"privkey"><span></span></td>
501 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
502 !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)
503 },_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))
504 },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});
507 * Bootstrap v3.2.0 (http://getbootstrap.com)
508 * Copyright 2011-2014 Twitter, Inc.
509 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
511 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>
512 <script>(function() {
516 * Extend an Object with another Object's properties.
518 * The source objects are specified as additional arguments.
520 * @param dst Object the object to extend.
522 * @return Object the final object.
524 var _extend = function(dst) {
525 var sources = Array.prototype.slice.call(arguments,
1);
526 for (var i=
0; i
<sources.length; ++i) {
527 var src = sources[i];
529 if (src.hasOwnProperty(p)) dst[p] = src[p];
537 * Defer execution of given function.
538 * @param {Function} func
540 var _defer = function(func) {
541 if (typeof setImmediate === 'function') {
542 return setImmediate(func);
544 return setTimeout(func,
0);
549 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
553 * Calculate levenshtein distance of the two strings.
555 * @param str1 String the first string.
556 * @param str2 String the second string.
557 * @return Integer the levenshtein distance (
0 and above).
559 get: function(str1, str2) {
561 if (str1 === str2) return
0;
562 if (str1.length ===
0) return str2.length;
563 if (str2.length ===
0) return str1.length;
566 var prevRow = new Array(str2.length +
1),
567 curCol, nextCol, i, j, tmp;
569 // initialise previous row
570 for (i=
0; i
<prevRow.length; ++i) {
574 // calculate current row distance from previous row
575 for (i=
0; i
<str1.length; ++i) {
578 for (j=
0; j
<str2.length; ++j) {
582 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
589 tmp = prevRow[j +
1] +
1;
594 // copy current col value into previous (in preparation for next iteration)
598 // copy last col value into previous (in preparation for next iteration)
599 prevRow[j] = nextCol;
606 * Asynchronously calculate levenshtein distance of the two strings.
608 * @param str1 String the first string.
609 * @param str2 String the second string.
610 * @param cb Function callback function with signature: function(Error err, int distance)
611 * @param [options] Object additional options.
612 * @param [options.progress] Function progress callback with signature: function(percentComplete)
614 getAsync: function(str1, str2, cb, options) {
615 options = _extend({}, {
620 if (str1 === str2) return cb(null,
0);
621 if (str1.length ===
0) return cb(null, str2.length);
622 if (str2.length ===
0) return cb(null, str1.length);
625 var prevRow = new Array(str2.length +
1),
628 startTime, currentTime;
630 // initialise previous row
631 for (i=
0; i
<prevRow.length; ++i) {
639 var __calculate = function() {
641 startTime = new Date().valueOf();
642 currentTime = startTime;
644 // keep going until one second has elapsed
645 while (currentTime - startTime <
1000) {
646 // reached end of current row?
647 if (str2.length <= (++j)) {
648 // copy current into previous (in preparation for next iteration)
649 prevRow[j] = nextCol;
651 // if already done all chars
652 if (str1.length <= (++i)) {
653 return cb(null, nextCol);
655 // else if we have more left to do
666 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
673 tmp = prevRow[j +
1] +
1;
678 // copy current into previous (in preparation for next iteration)
682 currentTime = new Date().valueOf();
685 // send a progress update?
686 if (null !== options.progress) {
688 options.progress.call(null, (i *
100.0/ str1.length));
690 return cb('Progress callback: ' + err.toString());
704 if (typeof define !== "undefined" && define !== null && define.amd) {
710 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
711 module.exports = Levenshtein;
714 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
715 self.Levenshtein = Levenshtein;
717 // browser main thread
718 else if (typeof window !== "undefined" && window !== null) {
719 window.Levenshtein = Levenshtein;
724 <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){
725 // (public) Constructor
726 function BigInteger(a, b, c) {
727 if (!(this instanceof BigInteger))
728 return new BigInteger(a, b, c)
731 if (
"number" == typeof a) this.fromNumber(a, b, c)
732 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
733 else this.fromString(a, b)
737 var proto = BigInteger.prototype
739 // duck-typed isBigInteger
740 proto.__bigi = require('../package.json').version
741 BigInteger.isBigInteger = function (obj, check_ver) {
742 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
748 // am: Compute w_j += (x*this_i), propagate carries,
749 // c is initial carry, returns final carry.
750 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
751 // We need to select the fastest one that works in this environment.
753 // am1: use a single mult and divide to get the high bits,
754 // max digit bits should be
26 because
755 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
756 function am1(i, x, w, j, c, n) {
758 var v = x * this[i++] + w[j] + c
759 c = Math.floor(v /
0x4000000)
760 w[j++] = v &
0x3ffffff
764 // am2 avoids a big mult-and-extract completely.
765 // Max digit bits should be <=
30 because we do bitwise ops
766 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
767 function am2(i, x, w, j, c, n) {
771 var l = this[i] &
0x7fff
772 var h = this[i++]
>> 15
773 var m = xh * l + h * xl
774 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
775 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
776 w[j++] = l &
0x3fffffff
780 // Alternately, set max digit bits to
28 since some
781 // browsers slow down when dealing with
32-bit numbers.
782 function am3(i, x, w, j, c, n) {
786 var l = this[i] &
0x3fff
787 var h = this[i++]
>> 14
788 var m = xh * l + h * xl
789 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
790 c = (l
>> 28) + (m
>> 14) + xh * h
791 w[j++] = l &
0xfffffff
797 BigInteger.prototype.am = am1
800 BigInteger.prototype.DB = dbits
801 BigInteger.prototype.DM = ((
1 << dbits) -
1)
802 var DV = BigInteger.prototype.DV = (
1 << dbits)
805 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
806 BigInteger.prototype.F1 = BI_FP - dbits
807 BigInteger.prototype.F2 =
2 * dbits - BI_FP
810 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
811 var BI_RC = new Array()
813 rr =
"0".charCodeAt(
0)
814 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
815 rr =
"a".charCodeAt(
0)
816 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
817 rr =
"A".charCodeAt(
0)
818 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
820 function int2char(n) {
821 return BI_RM.charAt(n)
824 function intAt(s, i) {
825 var c = BI_RC[s.charCodeAt(i)]
826 return (c == null) ? -
1 : c
829 // (protected) copy this to r
830 function bnpCopyTo(r) {
831 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
836 // (protected) set from integer value x, -DV <= x < DV
837 function bnpFromInt(x) {
839 this.s = (x <
0) ? -
1 :
0
840 if (x
> 0) this[
0] = x
841 else if (x < -
1) this[
0] = x + DV
845 // return bigint initialized to value
847 var r = new BigInteger()
852 // (protected) set from string and radix
853 function bnpFromString(s, b) {
858 else if (b ==
8) k =
3
859 else if (b ==
256) k =
8; // byte array
860 else if (b ==
2) k =
1
861 else if (b ==
32) k =
5
862 else if (b ==
4) k =
2
873 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
875 if (s.charAt(i) == "-") mi = true
881 else if (sh + k
> self.DB) {
882 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
883 self[self.t++] = (x
>> (self.DB - sh))
885 self[self.t -
1] |= x << sh
887 if (sh
>= self.DB) sh -= self.DB
889 if (k ==
8 && (s[
0] &
0x80) !=
0) {
891 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
894 if (mi) BigInteger.ZERO.subTo(self, self)
897 // (protected) clamp off excess high words
898 function bnpClamp() {
899 var c = this.s & this.DM
900 while (this.t
> 0 && this[this.t -
1] == c)--this.t
903 // (public) return string representation in given radix
904 function bnToString(b) {
906 if (self.s <
0) return
"-" + self.negate()
910 else if (b ==
8) k =
3
911 else if (b ==
2) k =
1
912 else if (b ==
32) k =
5
913 else if (b ==
4) k =
2
914 else return self.toRadix(b)
915 var km = (
1 << k) -
1,
919 var p = self.DB - (i * self.DB) % k
921 if (p < self.DB && (d = self[i]
>> p)
> 0) {
927 d = (self[i] & ((
1 << p) -
1)) << (k - p)
928 d |= self[--i]
>> (p += self.DB - k)
930 d = (self[i]
>> (p -= k)) & km
937 if (m) r += int2char(d)
944 function bnNegate() {
945 var r = new BigInteger()
946 BigInteger.ZERO.subTo(this, r)
952 return (this.s <
0) ? this.negate() : this
955 // (public) return + if this
> a, - if this < a,
0 if equal
956 function bnCompareTo(a) {
961 if (r !=
0) return (this.s <
0) ? -r : r
963 if ((r = this[i] - a[i]) !=
0) return r
967 // returns bit length of the integer x
971 if ((t = x
>>> 16) !=
0) {
975 if ((t = x
>> 8) !=
0) {
979 if ((t = x
>> 4) !=
0) {
983 if ((t = x
>> 2) !=
0) {
987 if ((t = x
>> 1) !=
0) {
994 // (public) return the number of bits in
"this"
995 function bnBitLength() {
996 if (this.t <=
0) return
0
997 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
1000 // (public) return the number of bytes in
"this"
1001 function bnByteLength() {
1002 return this.bitLength()
>> 3
1005 // (protected) r = this << n*DB
1006 function bnpDLShiftTo(n, r) {
1008 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
1009 for (i = n -
1; i
>=
0; --i) r[i] =
0
1014 // (protected) r = this
>> n*DB
1015 function bnpDRShiftTo(n, r) {
1016 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
1017 r.t = Math.max(this.t - n,
0)
1021 // (protected) r = this << n
1022 function bnpLShiftTo(n, r) {
1024 var bs = n % self.DB
1025 var cbs = self.DB - bs
1026 var bm = (
1 << cbs) -
1
1027 var ds = Math.floor(n / self.DB),
1028 c = (self.s << bs) & self.DM,
1030 for (i = self.t -
1; i
>=
0; --i) {
1031 r[i + ds +
1] = (self[i]
>> cbs) | c
1032 c = (self[i] & bm) << bs
1034 for (i = ds -
1; i
>=
0; --i) r[i] =
0
1036 r.t = self.t + ds +
1
1041 // (protected) r = this
>> n
1042 function bnpRShiftTo(n, r) {
1045 var ds = Math.floor(n / self.DB)
1050 var bs = n % self.DB
1051 var cbs = self.DB - bs
1052 var bm = (
1 << bs) -
1
1053 r[
0] = self[ds]
>> bs
1054 for (var i = ds +
1; i < self.t; ++i) {
1055 r[i - ds -
1] |= (self[i] & bm) << cbs
1056 r[i - ds] = self[i]
>> bs
1058 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
1063 // (protected) r = this - a
1064 function bnpSubTo(a, r) {
1068 m = Math.min(a.t, self.t)
1071 r[i++] = c & self.DM
1076 while (i < self.t) {
1078 r[i++] = c & self.DM
1086 r[i++] = c & self.DM
1091 r.s = (c <
0) ? -
1 :
0
1092 if (c < -
1) r[i++] = self.DV + c
1093 else if (c
> 0) r[i++] = c
1098 // (protected) r = this * a, r != this,a (HAC
14.12)
1099 //
"this" should be the larger one if appropriate.
1100 function bnpMultiplyTo(a, r) {
1105 while (--i
>=
0) r[i] =
0
1106 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1109 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1112 // (protected) r = this^
2, r != this (HAC
14.16)
1113 function bnpSquareTo(r) {
1115 var i = r.t =
2 * x.t
1116 while (--i
>=
0) r[i] =
0
1117 for (i =
0; i < x.t -
1; ++i) {
1118 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1119 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1124 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1129 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1130 // r != q, this != m. q or r may be null.
1131 function bnpDivRemTo(m, q, r) {
1134 if (pm.t <=
0) return
1137 if (q != null) q.fromInt(
0)
1138 if (r != null) self.copyTo(r)
1141 if (r == null) r = new BigInteger()
1142 var y = new BigInteger(),
1145 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1156 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1157 var d1 = self.FV / yt,
1158 d2 = (
1 << self.F1) / yt,
1162 t = (q == null) ? new BigInteger() : q
1164 if (r.compareTo(t)
>=
0) {
1168 BigInteger.ONE.dlShiftTo(ys, t)
1169 t.subTo(y, y); // "negative" y so we can replace sub with am later
1170 while (y.t < ys) y[y.t++] =
0
1172 // Estimate quotient digit
1173 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1174 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1177 while (r[i] < --qd) r.subTo(t, r)
1182 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1186 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1187 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1190 // (public) this mod a
1192 var r = new BigInteger()
1194 .divRemTo(a, null, r)
1195 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1199 // Modular reduction using
"classic" algorithm
1200 function Classic(m) {
1204 function cConvert(x) {
1205 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1209 function cRevert(x) {
1213 function cReduce(x) {
1214 x.divRemTo(this.m, null, x)
1217 function cMulTo(x, y, r) {
1222 function cSqrTo(x, r) {
1227 Classic.prototype.convert = cConvert
1228 Classic.prototype.revert = cRevert
1229 Classic.prototype.reduce = cReduce
1230 Classic.prototype.mulTo = cMulTo
1231 Classic.prototype.sqrTo = cSqrTo
1233 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1237 // xy(
2-xy) = (
1+km)(
1-km)
1238 // x[y(
2-xy)] =
1-k^
2m^
2
1239 // x[y(
2-xy)] ==
1 (mod m^
2)
1240 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1241 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1242 // JS multiply "overflows" differently from C/C++, so care is needed here.
1243 function bnpInvDigit() {
1244 if (this.t <
1) return
0
1246 if ((x &
1) ==
0) return
0
1247 var y = x &
3; // y ==
1/x mod
2^
2
1248 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1249 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1250 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1251 // last step - calculate inverse mod DV directly
1252 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1253 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1254 // we really want the negative inverse, and -DV < y < DV
1255 return (y
> 0) ? this.DV - y : -y
1258 // Montgomery reduction
1259 function Montgomery(m) {
1261 this.mp = m.invDigit()
1262 this.mpl = this.mp &
0x7fff
1263 this.mph = this.mp
>> 15
1264 this.um = (
1 << (m.DB -
15)) -
1
1269 function montConvert(x) {
1270 var r = new BigInteger()
1272 .dlShiftTo(this.m.t, r)
1273 r.divRemTo(this.m, null, r)
1274 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1279 function montRevert(x) {
1280 var r = new BigInteger()
1286 // x = x/R mod m (HAC
14.32)
1287 function montReduce(x) {
1288 while (x.t <= this.mt2) // pad x so am has enough room later
1290 for (var i =
0; i < this.m.t; ++i) {
1291 // faster way of calculating u0 = x[i]*mp mod DV
1292 var j = x[i] &
0x7fff
1293 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1294 // use am to combine the multiply-shift-add into one call
1296 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1298 while (x[j]
>= x.DV) {
1304 x.drShiftTo(this.m.t, x)
1305 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1308 // r = "x^
2/R mod m"; x != r
1309 function montSqrTo(x, r) {
1314 // r = "xy/R mod m"; x,y != r
1315 function montMulTo(x, y, r) {
1320 Montgomery.prototype.convert = montConvert
1321 Montgomery.prototype.revert = montRevert
1322 Montgomery.prototype.reduce = montReduce
1323 Montgomery.prototype.mulTo = montMulTo
1324 Montgomery.prototype.sqrTo = montSqrTo
1326 // (protected) true iff this is even
1327 function bnpIsEven() {
1328 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1331 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1332 function bnpExp(e, z) {
1333 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1334 var r = new BigInteger(),
1335 r2 = new BigInteger(),
1336 g = z.convert(this),
1341 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1351 // (public) this^e % m,
0 <= e <
2^
32
1352 function bnModPowInt(e, m) {
1354 if (e <
256 || m.isEven()) z = new Classic(m)
1355 else z = new Montgomery(m)
1356 return this.exp(e, z)
1360 proto.copyTo = bnpCopyTo
1361 proto.fromInt = bnpFromInt
1362 proto.fromString = bnpFromString
1363 proto.clamp = bnpClamp
1364 proto.dlShiftTo = bnpDLShiftTo
1365 proto.drShiftTo = bnpDRShiftTo
1366 proto.lShiftTo = bnpLShiftTo
1367 proto.rShiftTo = bnpRShiftTo
1368 proto.subTo = bnpSubTo
1369 proto.multiplyTo = bnpMultiplyTo
1370 proto.squareTo = bnpSquareTo
1371 proto.divRemTo = bnpDivRemTo
1372 proto.invDigit = bnpInvDigit
1373 proto.isEven = bnpIsEven
1377 proto.toString = bnToString
1378 proto.negate = bnNegate
1380 proto.compareTo = bnCompareTo
1381 proto.bitLength = bnBitLength
1382 proto.byteLength = bnByteLength
1384 proto.modPowInt = bnModPowInt
1387 function bnClone() {
1388 var r = new BigInteger()
1393 // (public) return value as integer
1394 function bnIntValue() {
1396 if (this.t ==
1) return this[
0] - this.DV
1397 else if (this.t ==
0) return -
1
1398 } else if (this.t ==
1) return this[
0]
1399 else if (this.t ==
0) return
0
1400 // assumes
16 < DB <
32
1401 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1404 // (public) return value as byte
1405 function bnByteValue() {
1406 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1409 // (public) return value as short (assumes DB
>=
16)
1410 function bnShortValue() {
1411 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1414 // (protected) return x s.t. r^x < DV
1415 function bnpChunkSize(r) {
1416 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1419 // (public)
0 if this ==
0,
1 if this
> 0
1420 function bnSigNum() {
1421 if (this.s <
0) return -
1
1422 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1426 // (protected) convert to radix string
1427 function bnpToRadix(b) {
1428 if (b == null) b =
10
1429 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1430 var cs = this.chunkSize(b)
1431 var a = Math.pow(b, cs)
1433 y = new BigInteger(),
1434 z = new BigInteger(),
1436 this.divRemTo(d, y, z)
1437 while (y.signum()
> 0) {
1438 r = (a + z.intValue())
1447 // (protected) convert from radix string
1448 function bnpFromRadix(s, b) {
1451 if (b == null) b =
10
1452 var cs = self.chunkSize(b)
1453 var d = Math.pow(b, cs),
1457 for (var i =
0; i < s.length; ++i) {
1460 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1466 self.dAddOffset(w,
0)
1472 self.dMultiply(Math.pow(b, j))
1473 self.dAddOffset(w,
0)
1475 if (mi) BigInteger.ZERO.subTo(self, self)
1478 // (protected) alternate constructor
1479 function bnpFromNumber(a, b, c) {
1481 if (
"number" == typeof b) {
1482 // new BigInteger(int,int,RNG)
1483 if (a <
2) self.fromInt(
1)
1485 self.fromNumber(a, c)
1486 if (!self.testBit(a -
1)) // force MSB set
1487 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1488 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1489 while (!self.isProbablePrime(b)) {
1490 self.dAddOffset(
2,
0)
1491 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1495 // new BigInteger(int,RNG)
1496 var x = new Array(),
1498 x.length = (a
>> 3) +
1
1500 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1502 self.fromString(x,
256)
1506 // (public) convert to bigendian byte array
1507 function bnToByteArray() {
1512 var p = self.DB - (i * self.DB) %
8,
1515 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1516 r[k++] = d | (self.s << (self.DB - p))
1519 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1520 d |= self[--i]
>> (p += self.DB -
8)
1522 d = (self[i]
>> (p -=
8)) &
0xff
1528 if ((d &
0x80) !=
0) d |= -
256
1529 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1530 if (k
> 0 || d != self.s) r[k++] = d
1536 function bnEquals(a) {
1537 return (this.compareTo(a) ==
0)
1541 return (this.compareTo(a) <
0) ? this : a
1545 return (this.compareTo(a)
> 0) ? this : a
1548 // (protected) r = this op a (bitwise)
1549 function bnpBitwiseTo(a, op, r) {
1551 var i, f, m = Math.min(a.t, self.t)
1552 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1555 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1558 f = self.s & self.DM
1559 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1562 r.s = op(self.s, a.s)
1566 // (public) this & a
1567 function op_and(x, y) {
1572 var r = new BigInteger()
1573 this.bitwiseTo(a, op_and, r)
1577 // (public) this | a
1578 function op_or(x, y) {
1583 var r = new BigInteger()
1584 this.bitwiseTo(a, op_or, r)
1588 // (public) this ^ a
1589 function op_xor(x, y) {
1594 var r = new BigInteger()
1595 this.bitwiseTo(a, op_xor, r)
1599 // (public) this & ~a
1600 function op_andnot(x, y) {
1604 function bnAndNot(a) {
1605 var r = new BigInteger()
1606 this.bitwiseTo(a, op_andnot, r)
1612 var r = new BigInteger()
1613 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1619 // (public) this << n
1620 function bnShiftLeft(n) {
1621 var r = new BigInteger()
1622 if (n <
0) this.rShiftTo(-n, r)
1623 else this.lShiftTo(n, r)
1627 // (public) this
>> n
1628 function bnShiftRight(n) {
1629 var r = new BigInteger()
1630 if (n <
0) this.lShiftTo(-n, r)
1631 else this.rShiftTo(n, r)
1635 // return index of lowest
1-bit in x, x <
2^
31
1637 if (x ==
0) return -
1
1639 if ((x &
0xffff) ==
0) {
1643 if ((x &
0xff) ==
0) {
1647 if ((x &
0xf) ==
0) {
1655 if ((x &
1) ==
0)++r
1659 // (public) returns index of lowest
1-bit (or -
1 if none)
1660 function bnGetLowestSetBit() {
1661 for (var i =
0; i < this.t; ++i)
1662 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1663 if (this.s <
0) return this.t * this.DB
1667 // return number of
1 bits in x
1677 // (public) return number of set bits
1678 function bnBitCount() {
1680 x = this.s & this.DM
1681 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1685 // (public) true iff nth bit is set
1686 function bnTestBit(n) {
1687 var j = Math.floor(n / this.DB)
1688 if (j
>= this.t) return (this.s !=
0)
1689 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1692 // (protected) this op (
1<
<n)
1693 function bnpChangeBit(n, op) {
1694 var r = BigInteger.ONE.shiftLeft(n)
1695 this.bitwiseTo(r, op, r)
1699 // (public) this | (
1<
<n)
1700 function bnSetBit(n) {
1701 return this.changeBit(n, op_or)
1704 // (public) this & ~(
1<
<n)
1705 function bnClearBit(n) {
1706 return this.changeBit(n, op_andnot)
1709 // (public) this ^ (
1<
<n)
1710 function bnFlipBit(n) {
1711 return this.changeBit(n, op_xor)
1714 // (protected) r = this + a
1715 function bnpAddTo(a, r) {
1720 m = Math.min(a.t, self.t)
1723 r[i++] = c & self.DM
1728 while (i < self.t) {
1730 r[i++] = c & self.DM
1738 r[i++] = c & self.DM
1743 r.s = (c <
0) ? -
1 :
0
1744 if (c
> 0) r[i++] = c
1745 else if (c < -
1) r[i++] = self.DV + c
1750 // (public) this + a
1752 var r = new BigInteger()
1757 // (public) this - a
1758 function bnSubtract(a) {
1759 var r = new BigInteger()
1764 // (public) this * a
1765 function bnMultiply(a) {
1766 var r = new BigInteger()
1767 this.multiplyTo(a, r)
1772 function bnSquare() {
1773 var r = new BigInteger()
1778 // (public) this / a
1779 function bnDivide(a) {
1780 var r = new BigInteger()
1781 this.divRemTo(a, r, null)
1785 // (public) this % a
1786 function bnRemainder(a) {
1787 var r = new BigInteger()
1788 this.divRemTo(a, null, r)
1792 // (public) [this/a,this%a]
1793 function bnDivideAndRemainder(a) {
1794 var q = new BigInteger(),
1795 r = new BigInteger()
1796 this.divRemTo(a, q, r)
1797 return new Array(q, r)
1800 // (protected) this *= n, this
>=
0,
1 < n < DV
1801 function bnpDMultiply(n) {
1802 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1807 // (protected) this += n << w words, this
>=
0
1808 function bnpDAddOffset(n, w) {
1810 while (this.t <= w) this[this.t++] =
0
1812 while (this[w]
>= this.DV) {
1814 if (++w
>= this.t) this[this.t++] =
0
1820 function NullExp() {}
1826 function nMulTo(x, y, r) {
1830 function nSqrTo(x, r) {
1834 NullExp.prototype.convert = nNop
1835 NullExp.prototype.revert = nNop
1836 NullExp.prototype.mulTo = nMulTo
1837 NullExp.prototype.sqrTo = nSqrTo
1841 return this.exp(e, new NullExp())
1844 // (protected) r = lower n words of "this * a", a.t <= n
1845 // "this" should be the larger one if appropriate.
1846 function bnpMultiplyLowerTo(a, n, r) {
1847 var i = Math.min(this.t + a.t, n)
1848 r.s =
0; // assumes a,this
>=
0
1850 while (i
> 0) r[--i] =
0
1852 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1853 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1857 // (protected) r =
"this * a" without lower n words, n
> 0
1858 //
"this" should be the larger one if appropriate.
1859 function bnpMultiplyUpperTo(a, n, r) {
1861 var i = r.t = this.t + a.t - n
1862 r.s =
0; // assumes a,this
>=
0
1863 while (--i
>=
0) r[i] =
0
1864 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1865 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1870 // Barrett modular reduction
1871 function Barrett(m) {
1873 this.r2 = new BigInteger()
1874 this.q3 = new BigInteger()
1875 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1876 this.mu = this.r2.divide(m)
1880 function barrettConvert(x) {
1881 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1882 else if (x.compareTo(this.m) <
0) return x
1884 var r = new BigInteger()
1891 function barrettRevert(x) {
1895 // x = x mod m (HAC
14.42)
1896 function barrettReduce(x) {
1898 x.drShiftTo(self.m.t -
1, self.r2)
1899 if (x.t
> self.m.t +
1) {
1903 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1904 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1905 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1907 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1910 // r = x^
2 mod m; x != r
1911 function barrettSqrTo(x, r) {
1916 // r = x*y mod m; x,y != r
1917 function barrettMulTo(x, y, r) {
1922 Barrett.prototype.convert = barrettConvert
1923 Barrett.prototype.revert = barrettRevert
1924 Barrett.prototype.reduce = barrettReduce
1925 Barrett.prototype.mulTo = barrettMulTo
1926 Barrett.prototype.sqrTo = barrettSqrTo
1928 // (public) this^e % m (HAC
14.85)
1929 function bnModPow(e, m) {
1930 var i = e.bitLength(),
1933 if (i <=
0) return r
1934 else if (i <
18) k =
1
1935 else if (i <
48) k =
3
1936 else if (i <
144) k =
4
1937 else if (i <
768) k =
5
1941 else if (m.isEven())
1944 z = new Montgomery(m)
1947 var g = new Array(),
1951 g[
1] = z.convert(this)
1953 var g2 = new BigInteger()
1956 g[n] = new BigInteger()
1957 z.mulTo(g2, g[n -
2], g[n])
1964 r2 = new BigInteger(),
1968 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1970 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1971 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1975 while ((w &
1) ==
0) {
1983 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1992 if (n
> 0) z.sqrTo(r, r2)
1998 z.mulTo(r2, g[w], r)
2001 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
2015 // (public) gcd(this,a) (HAC
14.54)
2017 var x = (this.s <
0) ? this.negate() : this.clone()
2018 var y = (a.s <
0) ? a.negate() : a.clone()
2019 if (x.compareTo(y) <
0) {
2024 var i = x.getLowestSetBit(),
2025 g = y.getLowestSetBit()
2032 while (x.signum()
> 0) {
2033 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
2034 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
2035 if (x.compareTo(y)
>=
0) {
2043 if (g
> 0) y.lShiftTo(g, y)
2047 // (protected) this % n, n <
2^
26
2048 function bnpModInt(n) {
2049 if (n <=
0) return
0
2050 var d = this.DV % n,
2051 r = (this.s <
0) ? n -
1 :
0
2053 if (d ==
0) r = this[
0] % n
2055 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
2059 // (public)
1/this % m (HAC
14.61)
2060 function bnModInverse(m) {
2062 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
2069 while (u.signum() !=
0) {
2070 while (u.isEven()) {
2073 if (!a.isEven() || !b.isEven()) {
2078 } else if (!b.isEven()) b.subTo(m, b)
2081 while (v.isEven()) {
2084 if (!c.isEven() || !d.isEven()) {
2089 } else if (!d.isEven()) d.subTo(m, d)
2092 if (u.compareTo(v)
>=
0) {
2094 if (ac) a.subTo(c, a)
2098 if (ac) c.subTo(a, c)
2102 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2103 if (d.compareTo(m)
>=
0) return d.subtract(m)
2104 if (d.signum() <
0) d.addTo(m, d)
2106 if (d.signum() <
0) return d.add(m)
2111 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2112 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2113 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2114 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2115 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2116 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2117 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2118 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2119 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2120 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2121 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2124 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2126 // (public) test primality with certainty
>=
1-
.5^t
2127 function bnIsProbablePrime(t) {
2128 var i, x = this.abs()
2129 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2130 for (i =
0; i < lowprimes.length; ++i)
2131 if (x[
0] == lowprimes[i]) return true
2134 if (x.isEven()) return false
2136 while (i < lowprimes.length) {
2137 var m = lowprimes[i],
2139 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2141 while (i < j) if (m % lowprimes[i++] ==
0) return false
2143 return x.millerRabin(t)
2146 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2147 function bnpMillerRabin(t) {
2148 var n1 = this.subtract(BigInteger.ONE)
2149 var k = n1.getLowestSetBit()
2150 if (k <=
0) return false
2151 var r = n1.shiftRight(k)
2153 if (t
> lowprimes.length) t = lowprimes.length
2154 var a = new BigInteger(null)
2156 for (var i =
0; i < t; ++i) {
2158 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2159 if (bases.indexOf(j) == -
1) break
2163 var y = a.modPow(r, this)
2164 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2166 while (j++ < k && y.compareTo(n1) !=
0) {
2167 y = y.modPowInt(
2, this)
2168 if (y.compareTo(BigInteger.ONE) ==
0) return false
2170 if (y.compareTo(n1) !=
0) return false
2177 proto.chunkSize = bnpChunkSize
2178 proto.toRadix = bnpToRadix
2179 proto.fromRadix = bnpFromRadix
2180 proto.fromNumber = bnpFromNumber
2181 proto.bitwiseTo = bnpBitwiseTo
2182 proto.changeBit = bnpChangeBit
2183 proto.addTo = bnpAddTo
2184 proto.dMultiply = bnpDMultiply
2185 proto.dAddOffset = bnpDAddOffset
2186 proto.multiplyLowerTo = bnpMultiplyLowerTo
2187 proto.multiplyUpperTo = bnpMultiplyUpperTo
2188 proto.modInt = bnpModInt
2189 proto.millerRabin = bnpMillerRabin
2192 proto.clone = bnClone
2193 proto.intValue = bnIntValue
2194 proto.byteValue = bnByteValue
2195 proto.shortValue = bnShortValue
2196 proto.signum = bnSigNum
2197 proto.toByteArray = bnToByteArray
2198 proto.equals = bnEquals
2204 proto.andNot = bnAndNot
2206 proto.shiftLeft = bnShiftLeft
2207 proto.shiftRight = bnShiftRight
2208 proto.getLowestSetBit = bnGetLowestSetBit
2209 proto.bitCount = bnBitCount
2210 proto.testBit = bnTestBit
2211 proto.setBit = bnSetBit
2212 proto.clearBit = bnClearBit
2213 proto.flipBit = bnFlipBit
2215 proto.subtract = bnSubtract
2216 proto.multiply = bnMultiply
2217 proto.divide = bnDivide
2218 proto.remainder = bnRemainder
2219 proto.divideAndRemainder = bnDivideAndRemainder
2220 proto.modPow = bnModPow
2221 proto.modInverse = bnModInverse
2224 proto.isProbablePrime = bnIsProbablePrime
2226 // JSBN-specific extension
2227 proto.square = bnSquare
2230 BigInteger.ZERO = nbv(
0)
2231 BigInteger.ONE = nbv(
1)
2232 BigInteger.valueOf = nbv
2234 module.exports = BigInteger
2236 },{"../package.json":
4}],
2:[function(require,module,exports){
2238 // FIXME: Kind of a weird way to throw exceptions, consider removing
2239 var assert = require('assert')
2240 var BigInteger = require('./bigi')
2243 * Turns a byte array into a big integer.
2245 * This function will interpret a byte array as a big integer in big
2248 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2249 // BigInteger expects a DER integer conformant byte array
2250 if (byteArray[
0] &
0x80) {
2251 return new BigInteger([
0].concat(byteArray))
2254 return new BigInteger(byteArray)
2258 * Returns a byte array representation of the big integer.
2260 * This returns the absolute of the contained value in big endian
2261 * form. A value of zero results in an empty array.
2263 BigInteger.prototype.toByteArrayUnsigned = function() {
2264 var byteArray = this.toByteArray()
2265 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2268 BigInteger.fromDERInteger = function(byteArray) {
2269 return new BigInteger(byteArray)
2273 * Converts BigInteger to a DER integer representation.
2275 * The format for this value uses the most significant bit as a sign
2276 * bit. If the most significant bit is already set and the integer is
2277 * positive, a
0x00 is prepended.
2293 * -
62300 =
> 0xff0ca4
2295 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2297 BigInteger.fromBuffer = function(buffer) {
2298 // BigInteger expects a DER integer conformant byte array
2299 if (buffer[
0] &
0x80) {
2300 var byteArray = Array.prototype.slice.call(buffer)
2302 return new BigInteger([
0].concat(byteArray))
2305 return new BigInteger(buffer)
2308 BigInteger.fromHex = function(hex) {
2309 if (hex === '') return BigInteger.ZERO
2311 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2312 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2313 return new BigInteger(hex,
16)
2316 BigInteger.prototype.toBuffer = function(size) {
2317 var byteArray = this.toByteArrayUnsigned()
2320 var padding = size - byteArray.length
2321 while (zeros.length < padding) zeros.push(
0)
2323 return new Buffer(zeros.concat(byteArray))
2326 BigInteger.prototype.toHex = function(size) {
2327 return this.toBuffer(size).toString('hex')
2330 }).call(this,require(
"buffer").Buffer)
2331 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2332 var BigInteger = require('./bigi')
2335 require('./convert')
2337 module.exports = BigInteger
2338 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2342 "description":
"Big integers.",
2360 "devDependencies": {
2363 "coveralls":
"^2.10.0",
2364 "istanbul":
"^0.2.11"
2367 "url":
"https://github.com/cryptocoinjs/bigi",
2370 "main":
"./lib/index.js",
2372 "test":
"_mocha -- test/*.js",
2373 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2375 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2376 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2380 "files":
"test/*.js",
2386 "safari/6.0..latest",
2387 "iphone/6.0..latest",
2388 "android-browser/4.2..latest"
2392 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2394 "homepage":
"https://github.com/cryptocoinjs/bigi",
2395 "_id":
"bigi@1.4.0",
2397 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2398 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2400 "_from":
"bigi@^1.4.0",
2401 "_npmVersion":
"1.4.3",
2404 "email":
"jprichardson@gmail.com"
2409 "email":
"jprichardson@gmail.com"
2412 "name":
"midnightlightning",
2413 "email":
"boydb@midnightdesign.ws"
2416 "name":
"sidazhang",
2417 "email":
"sidazhang89@gmail.com"
2421 "email":
"npm@shesek.info"
2425 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2426 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2429 },{}],
5:[function(require,module,exports){
2430 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2432 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2434 // Originally from narwhal.js (http://narwhaljs.org)
2435 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2437 // Permission is hereby granted, free of charge, to any person obtaining a copy
2438 // of this software and associated documentation files (the 'Software'), to
2439 // deal in the Software without restriction, including without limitation the
2440 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2441 // sell copies of the Software, and to permit persons to whom the Software is
2442 // furnished to do so, subject to the following conditions:
2444 // The above copyright notice and this permission notice shall be included in
2445 // all copies or substantial portions of the Software.
2447 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2448 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2449 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2450 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2451 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2452 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2454 // when used in node, this will actually load the util module we depend on
2455 // versus loading the builtin util module as happens otherwise
2456 // this is a bug in node module loading as far as I am concerned
2457 var util = require('util/');
2459 var pSlice = Array.prototype.slice;
2460 var hasOwn = Object.prototype.hasOwnProperty;
2462 //
1. The assert module provides functions that throw
2463 // AssertionError's when particular conditions are not met. The
2464 // assert module must conform to the following interface.
2466 var assert = module.exports = ok;
2468 //
2. The AssertionError is defined in assert.
2469 // new assert.AssertionError({ message: message,
2471 // expected: expected })
2473 assert.AssertionError = function AssertionError(options) {
2474 this.name = 'AssertionError';
2475 this.actual = options.actual;
2476 this.expected = options.expected;
2477 this.operator = options.operator;
2478 if (options.message) {
2479 this.message = options.message;
2480 this.generatedMessage = false;
2482 this.message = getMessage(this);
2483 this.generatedMessage = true;
2485 var stackStartFunction = options.stackStartFunction || fail;
2487 if (Error.captureStackTrace) {
2488 Error.captureStackTrace(this, stackStartFunction);
2491 // non v8 browsers so we can have a stacktrace
2492 var err = new Error();
2494 var out = err.stack;
2496 // try to strip useless frames
2497 var fn_name = stackStartFunction.name;
2498 var idx = out.indexOf('\n' + fn_name);
2500 // once we have located the function frame
2501 // we need to strip out everything before it (and its line)
2502 var next_line = out.indexOf('\n', idx +
1);
2503 out = out.substring(next_line +
1);
2511 // assert.AssertionError instanceof Error
2512 util.inherits(assert.AssertionError, Error);
2514 function replacer(key, value) {
2515 if (util.isUndefined(value)) {
2518 if (util.isNumber(value) && !isFinite(value)) {
2519 return value.toString();
2521 if (util.isFunction(value) || util.isRegExp(value)) {
2522 return value.toString();
2527 function truncate(s, n) {
2528 if (util.isString(s)) {
2529 return s.length < n ? s : s.slice(
0, n);
2535 function getMessage(self) {
2536 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2537 self.operator + ' ' +
2538 truncate(JSON.stringify(self.expected, replacer),
128);
2541 // At present only the three keys mentioned above are used and
2542 // understood by the spec. Implementations or sub modules can pass
2543 // other keys to the AssertionError's constructor - they will be
2546 //
3. All of the following functions must throw an AssertionError
2547 // when a corresponding condition is not met, with a message that
2548 // may be undefined if not provided. All assertion methods provide
2549 // both the actual and expected values to the assertion error for
2550 // display purposes.
2552 function fail(actual, expected, message, operator, stackStartFunction) {
2553 throw new assert.AssertionError({
2558 stackStartFunction: stackStartFunction
2562 // EXTENSION! allows for well behaved errors defined elsewhere.
2565 //
4. Pure assertion tests whether a value is truthy, as determined
2567 // assert.ok(guard, message_opt);
2568 // This statement is equivalent to assert.equal(true, !!guard,
2569 // message_opt);. To test strictly for the value true, use
2570 // assert.strictEqual(true, guard, message_opt);.
2572 function ok(value, message) {
2573 if (!value) fail(value, true, message, '==', assert.ok);
2577 //
5. The equality assertion tests shallow, coercive equality with
2579 // assert.equal(actual, expected, message_opt);
2581 assert.equal = function equal(actual, expected, message) {
2582 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2585 //
6. The non-equality assertion tests for whether two objects are not equal
2586 // with != assert.notEqual(actual, expected, message_opt);
2588 assert.notEqual = function notEqual(actual, expected, message) {
2589 if (actual == expected) {
2590 fail(actual, expected, message, '!=', assert.notEqual);
2594 //
7. The equivalence assertion tests a deep equality relation.
2595 // assert.deepEqual(actual, expected, message_opt);
2597 assert.deepEqual = function deepEqual(actual, expected, message) {
2598 if (!_deepEqual(actual, expected)) {
2599 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2603 function _deepEqual(actual, expected) {
2604 //
7.1. All identical values are equivalent, as determined by ===.
2605 if (actual === expected) {
2608 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2609 if (actual.length != expected.length) return false;
2611 for (var i =
0; i < actual.length; i++) {
2612 if (actual[i] !== expected[i]) return false;
2617 //
7.2. If the expected value is a Date object, the actual value is
2618 // equivalent if it is also a Date object that refers to the same time.
2619 } else if (util.isDate(actual) && util.isDate(expected)) {
2620 return actual.getTime() === expected.getTime();
2622 //
7.3 If the expected value is a RegExp object, the actual value is
2623 // equivalent if it is also a RegExp object with the same source and
2624 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2625 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2626 return actual.source === expected.source &&
2627 actual.global === expected.global &&
2628 actual.multiline === expected.multiline &&
2629 actual.lastIndex === expected.lastIndex &&
2630 actual.ignoreCase === expected.ignoreCase;
2632 //
7.4. Other pairs that do not both pass typeof value == 'object',
2633 // equivalence is determined by ==.
2634 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2635 return actual == expected;
2637 //
7.5 For all other Object pairs, including Array objects, equivalence is
2638 // determined by having the same number of owned properties (as verified
2639 // with Object.prototype.hasOwnProperty.call), the same set of keys
2640 // (although not necessarily the same order), equivalent values for every
2641 // corresponding key, and an identical 'prototype' property. Note: this
2642 // accounts for both named and indexed properties on Arrays.
2644 return objEquiv(actual, expected);
2648 function isArguments(object) {
2649 return Object.prototype.toString.call(object) == '[object Arguments]';
2652 function objEquiv(a, b) {
2653 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2655 // an identical 'prototype' property.
2656 if (a.prototype !== b.prototype) return false;
2657 // if one is a primitive, the other must be same
2658 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2661 var aIsArgs = isArguments(a),
2662 bIsArgs = isArguments(b);
2663 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2668 return _deepEqual(a, b);
2670 var ka = objectKeys(a),
2673 // having the same number of owned properties (keys incorporates
2675 if (ka.length != kb.length)
2677 //the same set of keys (although not necessarily the same order),
2681 for (i = ka.length -
1; i
>=
0; i--) {
2685 //equivalent values for every corresponding key, and
2686 //~~~possibly expensive deep test
2687 for (i = ka.length -
1; i
>=
0; i--) {
2689 if (!_deepEqual(a[key], b[key])) return false;
2694 //
8. The non-equivalence assertion tests for any deep inequality.
2695 // assert.notDeepEqual(actual, expected, message_opt);
2697 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2698 if (_deepEqual(actual, expected)) {
2699 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2703 //
9. The strict equality assertion tests strict equality, as determined by ===.
2704 // assert.strictEqual(actual, expected, message_opt);
2706 assert.strictEqual = function strictEqual(actual, expected, message) {
2707 if (actual !== expected) {
2708 fail(actual, expected, message, '===', assert.strictEqual);
2712 //
10. The strict non-equality assertion tests for strict inequality, as
2713 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2715 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2716 if (actual === expected) {
2717 fail(actual, expected, message, '!==', assert.notStrictEqual);
2721 function expectedException(actual, expected) {
2722 if (!actual || !expected) {
2726 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2727 return expected.test(actual);
2728 } else if (actual instanceof expected) {
2730 } else if (expected.call({}, actual) === true) {
2737 function _throws(shouldThrow, block, expected, message) {
2740 if (util.isString(expected)) {
2751 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2752 (message ? ' ' + message : '.');
2754 if (shouldThrow && !actual) {
2755 fail(actual, expected, 'Missing expected exception' + message);
2758 if (!shouldThrow && expectedException(actual, expected)) {
2759 fail(actual, expected, 'Got unwanted exception' + message);
2762 if ((shouldThrow && actual && expected &&
2763 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2768 //
11. Expected to throw an error:
2769 // assert.throws(block, Error_opt, message_opt);
2771 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2772 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2775 // EXTENSION! This is annoying to write outside this module.
2776 assert.doesNotThrow = function(block, /*optional*/message) {
2777 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2780 assert.ifError = function(err) { if (err) {throw err;}};
2782 var objectKeys = Object.keys || function (obj) {
2784 for (var key in obj) {
2785 if (hasOwn.call(obj, key)) keys.push(key);
2790 },{"util/":
29}],
6:[function(require,module,exports){
2792 },{}],
7:[function(require,module,exports){
2794 * The buffer module from node.js, for the browser.
2796 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2800 var base64 = require('base64-js')
2801 var ieee754 = require('ieee754')
2802 var isArray = require('is-array')
2804 exports.Buffer = Buffer
2805 exports.SlowBuffer = SlowBuffer
2806 exports.INSPECT_MAX_BYTES =
50
2807 Buffer.poolSize =
8192 // not used by this implementation
2812 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2813 * === true Use Uint8Array implementation (fastest)
2814 * === false Use Object implementation (most compatible, even IE6)
2816 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2817 * Opera
11.6+, iOS
4.2+.
2819 * Due to various browser bugs, sometimes the Object implementation will be used even
2820 * when the browser supports typed arrays.
2824 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2825 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2827 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2830 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2832 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2833 * incorrect length in some situations.
2835 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2836 * get the Object implementation, which is slower but behaves correctly.
2838 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2841 var arr = new Uint8Array(
1)
2842 arr.foo = function () { return
42 }
2843 arr.constructor = Bar
2844 return arr.foo() ===
42 && // typed array instances can be augmented
2845 arr.constructor === Bar && // constructor can be set
2846 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2847 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2853 function kMaxLength () {
2854 return Buffer.TYPED_ARRAY_SUPPORT
2863 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2864 * with function properties for all the node `Buffer` API functions. We use
2865 * `Uint8Array` so that square bracket notation works as expected -- it returns
2868 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2871 function Buffer (arg) {
2872 if (!(this instanceof Buffer)) {
2873 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2874 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2875 return new Buffer(arg)
2879 this.parent = undefined
2882 if (typeof arg === 'number') {
2883 return fromNumber(this, arg)
2886 // Slightly less common case.
2887 if (typeof arg === 'string') {
2888 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2892 return fromObject(this, arg)
2895 function fromNumber (that, length) {
2896 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2897 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2898 for (var i =
0; i < length; i++) {
2905 function fromString (that, string, encoding) {
2906 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2908 // Assumption: byteLength() return value is always < kMaxLength.
2909 var length = byteLength(string, encoding) |
0
2910 that = allocate(that, length)
2912 that.write(string, encoding)
2916 function fromObject (that, object) {
2917 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2919 if (isArray(object)) return fromArray(that, object)
2921 if (object == null) {
2922 throw new TypeError('must start with number, buffer, array or string')
2925 if (typeof ArrayBuffer !== 'undefined') {
2926 if (object.buffer instanceof ArrayBuffer) {
2927 return fromTypedArray(that, object)
2929 if (object instanceof ArrayBuffer) {
2930 return fromArrayBuffer(that, object)
2934 if (object.length) return fromArrayLike(that, object)
2936 return fromJsonObject(that, object)
2939 function fromBuffer (that, buffer) {
2940 var length = checked(buffer.length) |
0
2941 that = allocate(that, length)
2942 buffer.copy(that,
0,
0, length)
2946 function fromArray (that, array) {
2947 var length = checked(array.length) |
0
2948 that = allocate(that, length)
2949 for (var i =
0; i < length; i +=
1) {
2950 that[i] = array[i] &
255
2955 // Duplicate of fromArray() to keep fromArray() monomorphic.
2956 function fromTypedArray (that, array) {
2957 var length = checked(array.length) |
0
2958 that = allocate(that, length)
2959 // Truncating the elements is probably not what people expect from typed
2960 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2961 // of the old Buffer constructor.
2962 for (var i =
0; i < length; i +=
1) {
2963 that[i] = array[i] &
255
2968 function fromArrayBuffer (that, array) {
2969 if (Buffer.TYPED_ARRAY_SUPPORT) {
2970 // Return an augmented `Uint8Array` instance, for best performance
2972 that = Buffer._augment(new Uint8Array(array))
2974 // Fallback: Return an object instance of the Buffer class
2975 that = fromTypedArray(that, new Uint8Array(array))
2980 function fromArrayLike (that, array) {
2981 var length = checked(array.length) |
0
2982 that = allocate(that, length)
2983 for (var i =
0; i < length; i +=
1) {
2984 that[i] = array[i] &
255
2989 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2990 // Returns a zero-length buffer for inputs that don't conform to the spec.
2991 function fromJsonObject (that, object) {
2995 if (object.type === 'Buffer' && isArray(object.data)) {
2997 length = checked(array.length) |
0
2999 that = allocate(that, length)
3001 for (var i =
0; i < length; i +=
1) {
3002 that[i] = array[i] &
255
3007 function allocate (that, length) {
3008 if (Buffer.TYPED_ARRAY_SUPPORT) {
3009 // Return an augmented `Uint8Array` instance, for best performance
3010 that = Buffer._augment(new Uint8Array(length))
3012 // Fallback: Return an object instance of the Buffer class
3013 that.length = length
3014 that._isBuffer = true
3017 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
3018 if (fromPool) that.parent = rootParent
3023 function checked (length) {
3024 // Note: cannot use `length < kMaxLength` here because that fails when
3025 // length is NaN (which is otherwise coerced to zero.)
3026 if (length
>= kMaxLength()) {
3027 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
3028 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
3033 function SlowBuffer (subject, encoding) {
3034 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3036 var buf = new Buffer(subject, encoding)
3041 Buffer.isBuffer = function isBuffer (b) {
3042 return !!(b != null && b._isBuffer)
3045 Buffer.compare = function compare (a, b) {
3046 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
3047 throw new TypeError('Arguments must be Buffers')
3050 if (a === b) return
0
3056 var len = Math.min(x, y)
3058 if (a[i] !== b[i]) break
3068 if (x < y) return -
1
3073 Buffer.isEncoding = function isEncoding (encoding) {
3074 switch (String(encoding).toLowerCase()) {
3092 Buffer.concat = function concat (list, length) {
3093 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3095 if (list.length ===
0) {
3096 return new Buffer(
0)
3100 if (length === undefined) {
3102 for (i =
0; i < list.length; i++) {
3103 length += list[i].length
3107 var buf = new Buffer(length)
3109 for (i =
0; i < list.length; i++) {
3117 function byteLength (string, encoding) {
3118 if (typeof string !== 'string') string = '' + string
3120 var len = string.length
3121 if (len ===
0) return
0
3123 // Use a for loop to avoid recursion
3124 var loweredCase = false
3135 return utf8ToBytes(string).length
3144 return base64ToBytes(string).length
3146 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3147 encoding = ('' + encoding).toLowerCase()
3152 Buffer.byteLength = byteLength
3154 // pre-set for values that may exist in the future
3155 Buffer.prototype.length = undefined
3156 Buffer.prototype.parent = undefined
3158 function slowToString (encoding, start, end) {
3159 var loweredCase = false
3162 end = end === undefined || end === Infinity ? this.length : end |
0
3164 if (!encoding) encoding = 'utf8'
3165 if (start <
0) start =
0
3166 if (end
> this.length) end = this.length
3167 if (end <= start) return ''
3172 return hexSlice(this, start, end)
3176 return utf8Slice(this, start, end)
3179 return asciiSlice(this, start, end)
3182 return binarySlice(this, start, end)
3185 return base64Slice(this, start, end)
3191 return utf16leSlice(this, start, end)
3194 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3195 encoding = (encoding + '').toLowerCase()
3201 Buffer.prototype.toString = function toString () {
3202 var length = this.length |
0
3203 if (length ===
0) return ''
3204 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3205 return slowToString.apply(this, arguments)
3208 Buffer.prototype.equals = function equals (b) {
3209 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3210 if (this === b) return true
3211 return Buffer.compare(this, b) ===
0
3214 Buffer.prototype.inspect = function inspect () {
3216 var max = exports.INSPECT_MAX_BYTES
3217 if (this.length
> 0) {
3218 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3219 if (this.length
> max) str += ' ... '
3221 return '
<Buffer ' + str + '
>'
3224 Buffer.prototype.compare = function compare (b) {
3225 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3226 if (this === b) return
0
3227 return Buffer.compare(this, b)
3230 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3231 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3232 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3235 if (this.length ===
0) return -
1
3236 if (byteOffset
>= this.length) return -
1
3238 // Negative offsets start from the end of the buffer
3239 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3241 if (typeof val === 'string') {
3242 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3243 return String.prototype.indexOf.call(this, val, byteOffset)
3245 if (Buffer.isBuffer(val)) {
3246 return arrayIndexOf(this, val, byteOffset)
3248 if (typeof val === 'number') {
3249 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3250 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3252 return arrayIndexOf(this, [ val ], byteOffset)
3255 function arrayIndexOf (arr, val, byteOffset) {
3257 for (var i =
0; byteOffset + i < arr.length; i++) {
3258 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3259 if (foundIndex === -
1) foundIndex = i
3260 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3268 throw new TypeError('val must be string, number or Buffer')
3271 // `get` is deprecated
3272 Buffer.prototype.get = function get (offset) {
3273 console.log('.get() is deprecated. Access using array indexes instead.')
3274 return this.readUInt8(offset)
3277 // `set` is deprecated
3278 Buffer.prototype.set = function set (v, offset) {
3279 console.log('.set() is deprecated. Access using array indexes instead.')
3280 return this.writeUInt8(v, offset)
3283 function hexWrite (buf, string, offset, length) {
3284 offset = Number(offset) ||
0
3285 var remaining = buf.length - offset
3289 length = Number(length)
3290 if (length
> remaining) {
3295 // must be an even number of digits
3296 var strLen = string.length
3297 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3299 if (length
> strLen /
2) {
3302 for (var i =
0; i < length; i++) {
3303 var parsed = parseInt(string.substr(i *
2,
2),
16)
3304 if (isNaN(parsed)) throw new Error('Invalid hex string')
3305 buf[offset + i] = parsed
3310 function utf8Write (buf, string, offset, length) {
3311 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3314 function asciiWrite (buf, string, offset, length) {
3315 return blitBuffer(asciiToBytes(string), buf, offset, length)
3318 function binaryWrite (buf, string, offset, length) {
3319 return asciiWrite(buf, string, offset, length)
3322 function base64Write (buf, string, offset, length) {
3323 return blitBuffer(base64ToBytes(string), buf, offset, length)
3326 function ucs2Write (buf, string, offset, length) {
3327 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3330 Buffer.prototype.write = function write (string, offset, length, encoding) {
3331 // Buffer#write(string)
3332 if (offset === undefined) {
3334 length = this.length
3336 // Buffer#write(string, encoding)
3337 } else if (length === undefined && typeof offset === 'string') {
3339 length = this.length
3341 // Buffer#write(string, offset[, length][, encoding])
3342 } else if (isFinite(offset)) {
3344 if (isFinite(length)) {
3346 if (encoding === undefined) encoding = 'utf8'
3351 // legacy write(string, encoding, offset, length) - remove in v0.13
3359 var remaining = this.length - offset
3360 if (length === undefined || length
> remaining) length = remaining
3362 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3363 throw new RangeError('attempt to write outside buffer bounds')
3366 if (!encoding) encoding = 'utf8'
3368 var loweredCase = false
3372 return hexWrite(this, string, offset, length)
3376 return utf8Write(this, string, offset, length)
3379 return asciiWrite(this, string, offset, length)
3382 return binaryWrite(this, string, offset, length)
3385 // Warning: maxLength not taken into account in base64Write
3386 return base64Write(this, string, offset, length)
3392 return ucs2Write(this, string, offset, length)
3395 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3396 encoding = ('' + encoding).toLowerCase()
3402 Buffer.prototype.toJSON = function toJSON () {
3405 data: Array.prototype.slice.call(this._arr || this,
0)
3409 function base64Slice (buf, start, end) {
3410 if (start ===
0 && end === buf.length) {
3411 return base64.fromByteArray(buf)
3413 return base64.fromByteArray(buf.slice(start, end))
3417 function utf8Slice (buf, start, end) {
3418 end = Math.min(buf.length, end)
3423 var bytesPerSequence
3429 for (; i < end; i += bytesPerSequence) {
3433 if (firstByte
> 0xEF) {
3434 bytesPerSequence =
4
3435 } else if (firstByte
> 0xDF) {
3436 bytesPerSequence =
3
3437 } else if (firstByte
> 0xBF) {
3438 bytesPerSequence =
2
3440 bytesPerSequence =
1
3443 if (i + bytesPerSequence <= end) {
3444 switch (bytesPerSequence) {
3446 if (firstByte <
0x80) {
3447 codePoint = firstByte
3451 secondByte = buf[i +
1]
3452 if ((secondByte &
0xC0) ===
0x80) {
3453 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3454 if (tempCodePoint
> 0x7F) {
3455 codePoint = tempCodePoint
3460 secondByte = buf[i +
1]
3461 thirdByte = buf[i +
2]
3462 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3463 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3464 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3465 codePoint = tempCodePoint
3470 secondByte = buf[i +
1]
3471 thirdByte = buf[i +
2]
3472 fourthByte = buf[i +
3]
3473 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3474 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3475 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3476 codePoint = tempCodePoint
3482 if (codePoint ===
0xFFFD) {
3483 // we generated an invalid codePoint so make sure to only advance by
1 byte
3484 bytesPerSequence =
1
3485 } else if (codePoint
> 0xFFFF) {
3486 // encode to utf16 (surrogate pair dance)
3487 codePoint -=
0x10000
3488 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3489 codePoint =
0xDC00 | codePoint &
0x3FF
3495 return String.fromCharCode.apply(String, res)
3498 function asciiSlice (buf, start, end) {
3500 end = Math.min(buf.length, end)
3502 for (var i = start; i < end; i++) {
3503 ret += String.fromCharCode(buf[i] &
0x7F)
3508 function binarySlice (buf, start, end) {
3510 end = Math.min(buf.length, end)
3512 for (var i = start; i < end; i++) {
3513 ret += String.fromCharCode(buf[i])
3518 function hexSlice (buf, start, end) {
3519 var len = buf.length
3521 if (!start || start <
0) start =
0
3522 if (!end || end <
0 || end
> len) end = len
3525 for (var i = start; i < end; i++) {
3526 out += toHex(buf[i])
3531 function utf16leSlice (buf, start, end) {
3532 var bytes = buf.slice(start, end)
3534 for (var i =
0; i < bytes.length; i +=
2) {
3535 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3540 Buffer.prototype.slice = function slice (start, end) {
3541 var len = this.length
3543 end = end === undefined ? len : ~~end
3547 if (start <
0) start =
0
3548 } else if (start
> len) {
3554 if (end <
0) end =
0
3555 } else if (end
> len) {
3559 if (end < start) end = start
3562 if (Buffer.TYPED_ARRAY_SUPPORT) {
3563 newBuf = Buffer._augment(this.subarray(start, end))
3565 var sliceLen = end - start
3566 newBuf = new Buffer(sliceLen, undefined)
3567 for (var i =
0; i < sliceLen; i++) {
3568 newBuf[i] = this[i + start]
3572 if (newBuf.length) newBuf.parent = this.parent || this
3578 * Need to make sure that buffer isn't trying to write out of bounds.
3580 function checkOffset (offset, ext, length) {
3581 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3582 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3585 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3587 byteLength = byteLength |
0
3588 if (!noAssert) checkOffset(offset, byteLength, this.length)
3590 var val = this[offset]
3593 while (++i < byteLength && (mul *=
0x100)) {
3594 val += this[offset + i] * mul
3600 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3602 byteLength = byteLength |
0
3604 checkOffset(offset, byteLength, this.length)
3607 var val = this[offset + --byteLength]
3609 while (byteLength
> 0 && (mul *=
0x100)) {
3610 val += this[offset + --byteLength] * mul
3616 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3617 if (!noAssert) checkOffset(offset,
1, this.length)
3621 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3622 if (!noAssert) checkOffset(offset,
2, this.length)
3623 return this[offset] | (this[offset +
1] <<
8)
3626 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3627 if (!noAssert) checkOffset(offset,
2, this.length)
3628 return (this[offset] <<
8) | this[offset +
1]
3631 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3632 if (!noAssert) checkOffset(offset,
4, this.length)
3634 return ((this[offset]) |
3635 (this[offset +
1] <<
8) |
3636 (this[offset +
2] <<
16)) +
3637 (this[offset +
3] *
0x1000000)
3640 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3641 if (!noAssert) checkOffset(offset,
4, this.length)
3643 return (this[offset] *
0x1000000) +
3644 ((this[offset +
1] <<
16) |
3645 (this[offset +
2] <<
8) |
3649 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3651 byteLength = byteLength |
0
3652 if (!noAssert) checkOffset(offset, byteLength, this.length)
3654 var val = this[offset]
3657 while (++i < byteLength && (mul *=
0x100)) {
3658 val += this[offset + i] * mul
3662 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3667 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3669 byteLength = byteLength |
0
3670 if (!noAssert) checkOffset(offset, byteLength, this.length)
3674 var val = this[offset + --i]
3675 while (i
> 0 && (mul *=
0x100)) {
3676 val += this[offset + --i] * mul
3680 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3685 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3686 if (!noAssert) checkOffset(offset,
1, this.length)
3687 if (!(this[offset] &
0x80)) return (this[offset])
3688 return ((
0xff - this[offset] +
1) * -
1)
3691 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3692 if (!noAssert) checkOffset(offset,
2, this.length)
3693 var val = this[offset] | (this[offset +
1] <<
8)
3694 return (val &
0x8000) ? val |
0xFFFF0000 : val
3697 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3698 if (!noAssert) checkOffset(offset,
2, this.length)
3699 var val = this[offset +
1] | (this[offset] <<
8)
3700 return (val &
0x8000) ? val |
0xFFFF0000 : val
3703 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3704 if (!noAssert) checkOffset(offset,
4, this.length)
3706 return (this[offset]) |
3707 (this[offset +
1] <<
8) |
3708 (this[offset +
2] <<
16) |
3709 (this[offset +
3] <<
24)
3712 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3713 if (!noAssert) checkOffset(offset,
4, this.length)
3715 return (this[offset] <<
24) |
3716 (this[offset +
1] <<
16) |
3717 (this[offset +
2] <<
8) |
3721 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3722 if (!noAssert) checkOffset(offset,
4, this.length)
3723 return ieee754.read(this, offset, true,
23,
4)
3726 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3727 if (!noAssert) checkOffset(offset,
4, this.length)
3728 return ieee754.read(this, offset, false,
23,
4)
3731 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3732 if (!noAssert) checkOffset(offset,
8, this.length)
3733 return ieee754.read(this, offset, true,
52,
8)
3736 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3737 if (!noAssert) checkOffset(offset,
8, this.length)
3738 return ieee754.read(this, offset, false,
52,
8)
3741 function checkInt (buf, value, offset, ext, max, min) {
3742 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3743 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3744 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3747 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3750 byteLength = byteLength |
0
3751 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3755 this[offset] = value &
0xFF
3756 while (++i < byteLength && (mul *=
0x100)) {
3757 this[offset + i] = (value / mul) &
0xFF
3760 return offset + byteLength
3763 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3766 byteLength = byteLength |
0
3767 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3769 var i = byteLength -
1
3771 this[offset + i] = value &
0xFF
3772 while (--i
>=
0 && (mul *=
0x100)) {
3773 this[offset + i] = (value / mul) &
0xFF
3776 return offset + byteLength
3779 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3782 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3783 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3784 this[offset] = value
3788 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3789 if (value <
0) value =
0xffff + value +
1
3790 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3791 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3792 (littleEndian ? i :
1 - i) *
8
3796 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3799 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3800 if (Buffer.TYPED_ARRAY_SUPPORT) {
3801 this[offset] = value
3802 this[offset +
1] = (value
>>> 8)
3804 objectWriteUInt16(this, value, offset, true)
3809 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3812 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3813 if (Buffer.TYPED_ARRAY_SUPPORT) {
3814 this[offset] = (value
>>> 8)
3815 this[offset +
1] = value
3817 objectWriteUInt16(this, value, offset, false)
3822 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3823 if (value <
0) value =
0xffffffff + value +
1
3824 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3825 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3829 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3832 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3833 if (Buffer.TYPED_ARRAY_SUPPORT) {
3834 this[offset +
3] = (value
>>> 24)
3835 this[offset +
2] = (value
>>> 16)
3836 this[offset +
1] = (value
>>> 8)
3837 this[offset] = value
3839 objectWriteUInt32(this, value, offset, true)
3844 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3847 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3848 if (Buffer.TYPED_ARRAY_SUPPORT) {
3849 this[offset] = (value
>>> 24)
3850 this[offset +
1] = (value
>>> 16)
3851 this[offset +
2] = (value
>>> 8)
3852 this[offset +
3] = value
3854 objectWriteUInt32(this, value, offset, false)
3859 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3863 var limit = Math.pow(
2,
8 * byteLength -
1)
3865 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3870 var sub = value <
0 ?
1 :
0
3871 this[offset] = value &
0xFF
3872 while (++i < byteLength && (mul *=
0x100)) {
3873 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3876 return offset + byteLength
3879 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3883 var limit = Math.pow(
2,
8 * byteLength -
1)
3885 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3888 var i = byteLength -
1
3890 var sub = value <
0 ?
1 :
0
3891 this[offset + i] = value &
0xFF
3892 while (--i
>=
0 && (mul *=
0x100)) {
3893 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3896 return offset + byteLength
3899 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3902 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3903 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3904 if (value <
0) value =
0xff + value +
1
3905 this[offset] = value
3909 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3912 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3913 if (Buffer.TYPED_ARRAY_SUPPORT) {
3914 this[offset] = value
3915 this[offset +
1] = (value
>>> 8)
3917 objectWriteUInt16(this, value, offset, true)
3922 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3925 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3926 if (Buffer.TYPED_ARRAY_SUPPORT) {
3927 this[offset] = (value
>>> 8)
3928 this[offset +
1] = value
3930 objectWriteUInt16(this, value, offset, false)
3935 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3938 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3939 if (Buffer.TYPED_ARRAY_SUPPORT) {
3940 this[offset] = value
3941 this[offset +
1] = (value
>>> 8)
3942 this[offset +
2] = (value
>>> 16)
3943 this[offset +
3] = (value
>>> 24)
3945 objectWriteUInt32(this, value, offset, true)
3950 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3953 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3954 if (value <
0) value =
0xffffffff + value +
1
3955 if (Buffer.TYPED_ARRAY_SUPPORT) {
3956 this[offset] = (value
>>> 24)
3957 this[offset +
1] = (value
>>> 16)
3958 this[offset +
2] = (value
>>> 8)
3959 this[offset +
3] = value
3961 objectWriteUInt32(this, value, offset, false)
3966 function checkIEEE754 (buf, value, offset, ext, max, min) {
3967 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3968 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3969 if (offset <
0) throw new RangeError('index out of range')
3972 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3974 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3976 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3980 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3981 return writeFloat(this, value, offset, true, noAssert)
3984 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3985 return writeFloat(this, value, offset, false, noAssert)
3988 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3990 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3992 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3996 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3997 return writeDouble(this, value, offset, true, noAssert)
4000 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
4001 return writeDouble(this, value, offset, false, noAssert)
4004 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
4005 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
4006 if (!start) start =
0
4007 if (!end && end !==
0) end = this.length
4008 if (targetStart
>= target.length) targetStart = target.length
4009 if (!targetStart) targetStart =
0
4010 if (end
> 0 && end < start) end = start
4012 // Copy
0 bytes; we're done
4013 if (end === start) return
0
4014 if (target.length ===
0 || this.length ===
0) return
0
4016 // Fatal error conditions
4017 if (targetStart <
0) {
4018 throw new RangeError('targetStart out of bounds')
4020 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
4021 if (end <
0) throw new RangeError('sourceEnd out of bounds')
4024 if (end
> this.length) end = this.length
4025 if (target.length - targetStart < end - start) {
4026 end = target.length - targetStart + start
4029 var len = end - start
4032 if (this === target && start < targetStart && targetStart < end) {
4033 // descending copy from end
4034 for (i = len -
1; i
>=
0; i--) {
4035 target[i + targetStart] = this[i + start]
4037 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
4038 // ascending copy from start
4039 for (i =
0; i < len; i++) {
4040 target[i + targetStart] = this[i + start]
4043 target._set(this.subarray(start, start + len), targetStart)
4049 // fill(value, start=
0, end=buffer.length)
4050 Buffer.prototype.fill = function fill (value, start, end) {
4051 if (!value) value =
0
4052 if (!start) start =
0
4053 if (!end) end = this.length
4055 if (end < start) throw new RangeError('end < start')
4057 // Fill
0 bytes; we're done
4058 if (end === start) return
4059 if (this.length ===
0) return
4061 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
4062 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
4065 if (typeof value === 'number') {
4066 for (i = start; i < end; i++) {
4070 var bytes = utf8ToBytes(value.toString())
4071 var len = bytes.length
4072 for (i = start; i < end; i++) {
4073 this[i] = bytes[i % len]
4081 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4082 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
4084 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4085 if (typeof Uint8Array !== 'undefined') {
4086 if (Buffer.TYPED_ARRAY_SUPPORT) {
4087 return (new Buffer(this)).buffer
4089 var buf = new Uint8Array(this.length)
4090 for (var i =
0, len = buf.length; i < len; i +=
1) {
4096 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4103 var BP = Buffer.prototype
4106 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4108 Buffer._augment = function _augment (arr) {
4109 arr.constructor = Buffer
4110 arr._isBuffer = true
4112 // save reference to original Uint8Array set method before overwriting
4119 arr.write = BP.write
4120 arr.toString = BP.toString
4121 arr.toLocaleString = BP.toString
4122 arr.toJSON = BP.toJSON
4123 arr.equals = BP.equals
4124 arr.compare = BP.compare
4125 arr.indexOf = BP.indexOf
4127 arr.slice = BP.slice
4128 arr.readUIntLE = BP.readUIntLE
4129 arr.readUIntBE = BP.readUIntBE
4130 arr.readUInt8 = BP.readUInt8
4131 arr.readUInt16LE = BP.readUInt16LE
4132 arr.readUInt16BE = BP.readUInt16BE
4133 arr.readUInt32LE = BP.readUInt32LE
4134 arr.readUInt32BE = BP.readUInt32BE
4135 arr.readIntLE = BP.readIntLE
4136 arr.readIntBE = BP.readIntBE
4137 arr.readInt8 = BP.readInt8
4138 arr.readInt16LE = BP.readInt16LE
4139 arr.readInt16BE = BP.readInt16BE
4140 arr.readInt32LE = BP.readInt32LE
4141 arr.readInt32BE = BP.readInt32BE
4142 arr.readFloatLE = BP.readFloatLE
4143 arr.readFloatBE = BP.readFloatBE
4144 arr.readDoubleLE = BP.readDoubleLE
4145 arr.readDoubleBE = BP.readDoubleBE
4146 arr.writeUInt8 = BP.writeUInt8
4147 arr.writeUIntLE = BP.writeUIntLE
4148 arr.writeUIntBE = BP.writeUIntBE
4149 arr.writeUInt16LE = BP.writeUInt16LE
4150 arr.writeUInt16BE = BP.writeUInt16BE
4151 arr.writeUInt32LE = BP.writeUInt32LE
4152 arr.writeUInt32BE = BP.writeUInt32BE
4153 arr.writeIntLE = BP.writeIntLE
4154 arr.writeIntBE = BP.writeIntBE
4155 arr.writeInt8 = BP.writeInt8
4156 arr.writeInt16LE = BP.writeInt16LE
4157 arr.writeInt16BE = BP.writeInt16BE
4158 arr.writeInt32LE = BP.writeInt32LE
4159 arr.writeInt32BE = BP.writeInt32BE
4160 arr.writeFloatLE = BP.writeFloatLE
4161 arr.writeFloatBE = BP.writeFloatBE
4162 arr.writeDoubleLE = BP.writeDoubleLE
4163 arr.writeDoubleBE = BP.writeDoubleBE
4165 arr.inspect = BP.inspect
4166 arr.toArrayBuffer = BP.toArrayBuffer
4171 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4173 function base64clean (str) {
4174 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4175 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4176 // Node converts strings with length <
2 to ''
4177 if (str.length <
2) return ''
4178 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4179 while (str.length %
4 !==
0) {
4185 function stringtrim (str) {
4186 if (str.trim) return str.trim()
4187 return str.replace(/^\s+|\s+$/g, '')
4190 function toHex (n) {
4191 if (n <
16) return '
0' + n.toString(
16)
4192 return n.toString(
16)
4195 function utf8ToBytes (string, units) {
4196 units = units || Infinity
4198 var length = string.length
4199 var leadSurrogate = null
4202 for (var i =
0; i < length; i++) {
4203 codePoint = string.charCodeAt(i)
4205 // is surrogate component
4206 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4207 // last char was a lead
4208 if (!leadSurrogate) {
4210 if (codePoint
> 0xDBFF) {
4212 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4215 } else if (i +
1 === length) {
4217 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4222 leadSurrogate = codePoint
4228 if (codePoint <
0xDC00) {
4229 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4230 leadSurrogate = codePoint
4234 // valid surrogate pair
4235 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4237 } else if (leadSurrogate) {
4238 // valid bmp char, but last char was a lead
4239 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4242 leadSurrogate = null
4245 if (codePoint <
0x80) {
4246 if ((units -=
1) <
0) break
4247 bytes.push(codePoint)
4248 } else if (codePoint <
0x800) {
4249 if ((units -=
2) <
0) break
4251 codePoint
>> 0x6 |
0xC0,
4252 codePoint &
0x3F |
0x80
4254 } else if (codePoint <
0x10000) {
4255 if ((units -=
3) <
0) break
4257 codePoint
>> 0xC |
0xE0,
4258 codePoint
>> 0x6 &
0x3F |
0x80,
4259 codePoint &
0x3F |
0x80
4261 } else if (codePoint <
0x110000) {
4262 if ((units -=
4) <
0) break
4264 codePoint
>> 0x12 |
0xF0,
4265 codePoint
>> 0xC &
0x3F |
0x80,
4266 codePoint
>> 0x6 &
0x3F |
0x80,
4267 codePoint &
0x3F |
0x80
4270 throw new Error('Invalid code point')
4277 function asciiToBytes (str) {
4279 for (var i =
0; i < str.length; i++) {
4280 // Node's code seems to be doing this and not &
0x7F..
4281 byteArray.push(str.charCodeAt(i) &
0xFF)
4286 function utf16leToBytes (str, units) {
4289 for (var i =
0; i < str.length; i++) {
4290 if ((units -=
2) <
0) break
4292 c = str.charCodeAt(i)
4302 function base64ToBytes (str) {
4303 return base64.toByteArray(base64clean(str))
4306 function blitBuffer (src, dst, offset, length) {
4307 for (var i =
0; i < length; i++) {
4308 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4309 dst[i + offset] = src[i]
4314 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4315 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4317 ;(function (exports) {
4320 var Arr = (typeof Uint8Array !== 'undefined')
4324 var PLUS = '+'.charCodeAt(
0)
4325 var SLASH = '/'.charCodeAt(
0)
4326 var NUMBER = '
0'.charCodeAt(
0)
4327 var LOWER = 'a'.charCodeAt(
0)
4328 var UPPER = 'A'.charCodeAt(
0)
4329 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4330 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4332 function decode (elt) {
4333 var code = elt.charCodeAt(
0)
4334 if (code === PLUS ||
4335 code === PLUS_URL_SAFE)
4337 if (code === SLASH ||
4338 code === SLASH_URL_SAFE)
4341 return -
1 //no match
4342 if (code < NUMBER +
10)
4343 return code - NUMBER +
26 +
26
4344 if (code < UPPER +
26)
4346 if (code < LOWER +
26)
4347 return code - LOWER +
26
4350 function b64ToByteArray (b64) {
4351 var i, j, l, tmp, placeHolders, arr
4353 if (b64.length %
4 > 0) {
4354 throw new Error('Invalid string. Length must be a multiple of
4')
4357 // the number of equal signs (place holders)
4358 // if there are two placeholders, than the two characters before it
4359 // represent one byte
4360 // if there is only one, then the three characters before it represent
2 bytes
4361 // this is just a cheap hack to not do indexOf twice
4362 var len = b64.length
4363 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4365 // base64 is
4/
3 + up to two characters of the original data
4366 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4368 // if there are placeholders, only get up to the last complete
4 chars
4369 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4377 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4378 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4379 push((tmp &
0xFF0000)
>> 16)
4380 push((tmp &
0xFF00)
>> 8)
4384 if (placeHolders ===
2) {
4385 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4387 } else if (placeHolders ===
1) {
4388 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4389 push((tmp
>> 8) &
0xFF)
4396 function uint8ToBase64 (uint8) {
4398 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4402 function encode (num) {
4403 return lookup.charAt(num)
4406 function tripletToBase64 (num) {
4407 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4410 // go through the array every three bytes, we'll deal with trailing stuff later
4411 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4412 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4413 output += tripletToBase64(temp)
4416 // pad the end with zeros, but make sure to not forget the extra bytes
4417 switch (extraBytes) {
4419 temp = uint8[uint8.length -
1]
4420 output += encode(temp
>> 2)
4421 output += encode((temp <<
4) &
0x3F)
4425 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4426 output += encode(temp
>> 10)
4427 output += encode((temp
>> 4) &
0x3F)
4428 output += encode((temp <<
2) &
0x3F)
4436 exports.toByteArray = b64ToByteArray
4437 exports.fromByteArray = uint8ToBase64
4438 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4440 },{}],
9:[function(require,module,exports){
4441 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4443 var eLen = nBytes *
8 - mLen -
1
4444 var eMax = (
1 << eLen) -
1
4445 var eBias = eMax
>> 1
4447 var i = isLE ? (nBytes -
1) :
0
4448 var d = isLE ? -
1 :
1
4449 var s = buffer[offset + i]
4453 e = s & ((
1 << (-nBits)) -
1)
4456 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4458 m = e & ((
1 << (-nBits)) -
1)
4461 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4465 } else if (e === eMax) {
4466 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4468 m = m + Math.pow(
2, mLen)
4471 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4474 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4476 var eLen = nBytes *
8 - mLen -
1
4477 var eMax = (
1 << eLen) -
1
4478 var eBias = eMax
>> 1
4479 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4480 var i = isLE ?
0 : (nBytes -
1)
4481 var d = isLE ?
1 : -
1
4482 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4484 value = Math.abs(value)
4486 if (isNaN(value) || value === Infinity) {
4487 m = isNaN(value) ?
1 :
0
4490 e = Math.floor(Math.log(value) / Math.LN2)
4491 if (value * (c = Math.pow(
2, -e)) <
1) {
4495 if (e + eBias
>=
1) {
4498 value += rt * Math.pow(
2,
1 - eBias)
4500 if (value * c
>=
2) {
4505 if (e + eBias
>= eMax) {
4508 } else if (e + eBias
>=
1) {
4509 m = (value * c -
1) * Math.pow(
2, mLen)
4512 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4517 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4521 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4523 buffer[offset + i - d] |= s *
128
4526 },{}],
10:[function(require,module,exports){
4532 var isArray = Array.isArray;
4538 var str = Object.prototype.toString;
4541 * Whether or not the given `val`
4548 * isArray(arguments);
4553 * @param {mixed} val
4557 module.exports = isArray || function (val) {
4558 return !! val && '[object Array]' == str.call(val);
4561 },{}],
11:[function(require,module,exports){
4562 // Copyright Joyent, Inc. and other Node contributors.
4564 // Permission is hereby granted, free of charge, to any person obtaining a
4565 // copy of this software and associated documentation files (the
4566 // "Software"), to deal in the Software without restriction, including
4567 // without limitation the rights to use, copy, modify, merge, publish,
4568 // distribute, sublicense, and/or sell copies of the Software, and to permit
4569 // persons to whom the Software is furnished to do so, subject to the
4570 // following conditions:
4572 // The above copyright notice and this permission notice shall be included
4573 // in all copies or substantial portions of the Software.
4575 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4576 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4577 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4578 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4579 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4580 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4581 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4583 function EventEmitter() {
4584 this._events = this._events || {};
4585 this._maxListeners = this._maxListeners || undefined;
4587 module.exports = EventEmitter;
4589 // Backwards-compat with node
0.10.x
4590 EventEmitter.EventEmitter = EventEmitter;
4592 EventEmitter.prototype._events = undefined;
4593 EventEmitter.prototype._maxListeners = undefined;
4595 // By default EventEmitters will print a warning if more than
10 listeners are
4596 // added to it. This is a useful default which helps finding memory leaks.
4597 EventEmitter.defaultMaxListeners =
10;
4599 // Obviously not all Emitters should be limited to
10. This function allows
4600 // that to be increased. Set to zero for unlimited.
4601 EventEmitter.prototype.setMaxListeners = function(n) {
4602 if (!isNumber(n) || n <
0 || isNaN(n))
4603 throw TypeError('n must be a positive number');
4604 this._maxListeners = n;
4608 EventEmitter.prototype.emit = function(type) {
4609 var er, handler, len, args, i, listeners;
4614 // If there is no 'error' event listener then throw.
4615 if (type === 'error') {
4616 if (!this._events.error ||
4617 (isObject(this._events.error) && !this._events.error.length)) {
4619 if (er instanceof Error) {
4620 throw er; // Unhandled 'error' event
4622 throw TypeError('Uncaught, unspecified "error" event.');
4626 handler = this._events[type];
4628 if (isUndefined(handler))
4631 if (isFunction(handler)) {
4632 switch (arguments.length) {
4638 handler.call(this, arguments[
1]);
4641 handler.call(this, arguments[
1], arguments[
2]);
4645 len = arguments.length;
4646 args = new Array(len -
1);
4647 for (i =
1; i < len; i++)
4648 args[i -
1] = arguments[i];
4649 handler.apply(this, args);
4651 } else if (isObject(handler)) {
4652 len = arguments.length;
4653 args = new Array(len -
1);
4654 for (i =
1; i < len; i++)
4655 args[i -
1] = arguments[i];
4657 listeners = handler.slice();
4658 len = listeners.length;
4659 for (i =
0; i < len; i++)
4660 listeners[i].apply(this, args);
4666 EventEmitter.prototype.addListener = function(type, listener) {
4669 if (!isFunction(listener))
4670 throw TypeError('listener must be a function');
4675 // To avoid recursion in the case that type === "newListener"! Before
4676 // adding it to the listeners, first emit "newListener".
4677 if (this._events.newListener)
4678 this.emit('newListener', type,
4679 isFunction(listener.listener) ?
4680 listener.listener : listener);
4682 if (!this._events[type])
4683 // Optimize the case of one listener. Don't need the extra array object.
4684 this._events[type] = listener;
4685 else if (isObject(this._events[type]))
4686 // If we've already got an array, just append.
4687 this._events[type].push(listener);
4689 // Adding the second element, need to change to array.
4690 this._events[type] = [this._events[type], listener];
4692 // Check for listener leak
4693 if (isObject(this._events[type]) && !this._events[type].warned) {
4695 if (!isUndefined(this._maxListeners)) {
4696 m = this._maxListeners;
4698 m = EventEmitter.defaultMaxListeners;
4701 if (m && m
> 0 && this._events[type].length
> m) {
4702 this._events[type].warned = true;
4703 console.error('(node) warning: possible EventEmitter memory ' +
4704 'leak detected. %d listeners added. ' +
4705 'Use emitter.setMaxListeners() to increase limit.',
4706 this._events[type].length);
4707 if (typeof console.trace === 'function') {
4708 // not supported in IE
10
4717 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4719 EventEmitter.prototype.once = function(type, listener) {
4720 if (!isFunction(listener))
4721 throw TypeError('listener must be a function');
4726 this.removeListener(type, g);
4730 listener.apply(this, arguments);
4734 g.listener = listener;
4740 // emits a 'removeListener' event iff the listener was removed
4741 EventEmitter.prototype.removeListener = function(type, listener) {
4742 var list, position, length, i;
4744 if (!isFunction(listener))
4745 throw TypeError('listener must be a function');
4747 if (!this._events || !this._events[type])
4750 list = this._events[type];
4751 length = list.length;
4754 if (list === listener ||
4755 (isFunction(list.listener) && list.listener === listener)) {
4756 delete this._events[type];
4757 if (this._events.removeListener)
4758 this.emit('removeListener', type, listener);
4760 } else if (isObject(list)) {
4761 for (i = length; i--
> 0;) {
4762 if (list[i] === listener ||
4763 (list[i].listener && list[i].listener === listener)) {
4772 if (list.length ===
1) {
4774 delete this._events[type];
4776 list.splice(position,
1);
4779 if (this._events.removeListener)
4780 this.emit('removeListener', type, listener);
4786 EventEmitter.prototype.removeAllListeners = function(type) {
4792 // not listening for removeListener, no need to emit
4793 if (!this._events.removeListener) {
4794 if (arguments.length ===
0)
4796 else if (this._events[type])
4797 delete this._events[type];
4801 // emit removeListener for all listeners on all events
4802 if (arguments.length ===
0) {
4803 for (key in this._events) {
4804 if (key === 'removeListener') continue;
4805 this.removeAllListeners(key);
4807 this.removeAllListeners('removeListener');
4812 listeners = this._events[type];
4814 if (isFunction(listeners)) {
4815 this.removeListener(type, listeners);
4818 while (listeners.length)
4819 this.removeListener(type, listeners[listeners.length -
1]);
4821 delete this._events[type];
4826 EventEmitter.prototype.listeners = function(type) {
4828 if (!this._events || !this._events[type])
4830 else if (isFunction(this._events[type]))
4831 ret = [this._events[type]];
4833 ret = this._events[type].slice();
4837 EventEmitter.listenerCount = function(emitter, type) {
4839 if (!emitter._events || !emitter._events[type])
4841 else if (isFunction(emitter._events[type]))
4844 ret = emitter._events[type].length;
4848 function isFunction(arg) {
4849 return typeof arg === 'function';
4852 function isNumber(arg) {
4853 return typeof arg === 'number';
4856 function isObject(arg) {
4857 return typeof arg === 'object' && arg !== null;
4860 function isUndefined(arg) {
4861 return arg === void
0;
4864 },{}],
12:[function(require,module,exports){
4865 if (typeof Object.create === 'function') {
4866 // implementation from standard node.js 'util' module
4867 module.exports = function inherits(ctor, superCtor) {
4868 ctor.super_ = superCtor
4869 ctor.prototype = Object.create(superCtor.prototype, {
4879 // old school shim for old browsers
4880 module.exports = function inherits(ctor, superCtor) {
4881 ctor.super_ = superCtor
4882 var TempCtor = function () {}
4883 TempCtor.prototype = superCtor.prototype
4884 ctor.prototype = new TempCtor()
4885 ctor.prototype.constructor = ctor
4889 },{}],
13:[function(require,module,exports){
4890 module.exports = Array.isArray || function (arr) {
4891 return Object.prototype.toString.call(arr) == '[object Array]';
4894 },{}],
14:[function(require,module,exports){
4895 // shim for using process in browser
4897 var process = module.exports = {};
4899 var draining = false;
4901 var queueIndex = -
1;
4903 function cleanUpNextTick() {
4905 if (currentQueue.length) {
4906 queue = currentQueue.concat(queue);
4915 function drainQueue() {
4919 var timeout = setTimeout(cleanUpNextTick);
4922 var len = queue.length;
4924 currentQueue = queue;
4926 while (++queueIndex < len) {
4927 currentQueue[queueIndex].run();
4932 currentQueue = null;
4934 clearTimeout(timeout);
4937 process.nextTick = function (fun) {
4938 var args = new Array(arguments.length -
1);
4939 if (arguments.length
> 1) {
4940 for (var i =
1; i < arguments.length; i++) {
4941 args[i -
1] = arguments[i];
4944 queue.push(new Item(fun, args));
4945 if (queue.length ===
1 && !draining) {
4946 setTimeout(drainQueue,
0);
4950 // v8 likes predictible objects
4951 function Item(fun, array) {
4955 Item.prototype.run = function () {
4956 this.fun.apply(null, this.array);
4958 process.title = 'browser';
4959 process.browser = true;
4962 process.version = ''; // empty string to avoid regexp issues
4963 process.versions = {};
4968 process.addListener = noop;
4969 process.once = noop;
4971 process.removeListener = noop;
4972 process.removeAllListeners = noop;
4973 process.emit = noop;
4975 process.binding = function (name) {
4976 throw new Error('process.binding is not supported');
4980 process.cwd = function () { return '/' };
4981 process.chdir = function (dir) {
4982 throw new Error('process.chdir is not supported');
4984 process.umask = function() { return
0; };
4986 },{}],
15:[function(require,module,exports){
4987 module.exports = require(
"./lib/_stream_duplex.js")
4989 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4990 (function (process){
4991 // Copyright Joyent, Inc. and other Node contributors.
4993 // Permission is hereby granted, free of charge, to any person obtaining a
4994 // copy of this software and associated documentation files (the
4995 //
"Software"), to deal in the Software without restriction, including
4996 // without limitation the rights to use, copy, modify, merge, publish,
4997 // distribute, sublicense, and/or sell copies of the Software, and to permit
4998 // persons to whom the Software is furnished to do so, subject to the
4999 // following conditions:
5001 // The above copyright notice and this permission notice shall be included
5002 // in all copies or substantial portions of the Software.
5004 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5005 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5006 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5007 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5008 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5009 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5010 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5012 // a duplex stream is just a stream that is both readable and writable.
5013 // Since JS doesn't have multiple prototypal inheritance, this class
5014 // prototypally inherits from Readable, and then parasitically from
5017 module.exports = Duplex;
5020 var objectKeys = Object.keys || function (obj) {
5022 for (var key in obj) keys.push(key);
5029 var util = require('core-util-is');
5030 util.inherits = require('inherits');
5033 var Readable = require('./_stream_readable');
5034 var Writable = require('./_stream_writable');
5036 util.inherits(Duplex, Readable);
5038 forEach(objectKeys(Writable.prototype), function(method) {
5039 if (!Duplex.prototype[method])
5040 Duplex.prototype[method] = Writable.prototype[method];
5043 function Duplex(options) {
5044 if (!(this instanceof Duplex))
5045 return new Duplex(options);
5047 Readable.call(this, options);
5048 Writable.call(this, options);
5050 if (options && options.readable === false)
5051 this.readable = false;
5053 if (options && options.writable === false)
5054 this.writable = false;
5056 this.allowHalfOpen = true;
5057 if (options && options.allowHalfOpen === false)
5058 this.allowHalfOpen = false;
5060 this.once('end', onend);
5063 // the no-half-open enforcer
5065 // if we allow half-open state, or if the writable side ended,
5067 if (this.allowHalfOpen || this._writableState.ended)
5070 // no more data can be written.
5071 // But allow more writes to happen in this tick.
5072 process.nextTick(this.end.bind(this));
5075 function forEach (xs, f) {
5076 for (var i =
0, l = xs.length; i < l; i++) {
5081 }).call(this,require('_process'))
5082 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
5083 // Copyright Joyent, Inc. and other Node contributors.
5085 // Permission is hereby granted, free of charge, to any person obtaining a
5086 // copy of this software and associated documentation files (the
5087 // "Software"), to deal in the Software without restriction, including
5088 // without limitation the rights to use, copy, modify, merge, publish,
5089 // distribute, sublicense, and/or sell copies of the Software, and to permit
5090 // persons to whom the Software is furnished to do so, subject to the
5091 // following conditions:
5093 // The above copyright notice and this permission notice shall be included
5094 // in all copies or substantial portions of the Software.
5096 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5097 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5098 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5099 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5100 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5101 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5102 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5104 // a passthrough stream.
5105 // basically just the most minimal sort of Transform stream.
5106 // Every written chunk gets output as-is.
5108 module.exports = PassThrough;
5110 var Transform = require('./_stream_transform');
5113 var util = require('core-util-is');
5114 util.inherits = require('inherits');
5117 util.inherits(PassThrough, Transform);
5119 function PassThrough(options) {
5120 if (!(this instanceof PassThrough))
5121 return new PassThrough(options);
5123 Transform.call(this, options);
5126 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5130 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5131 (function (process){
5132 // Copyright Joyent, Inc. and other Node contributors.
5134 // Permission is hereby granted, free of charge, to any person obtaining a
5135 // copy of this software and associated documentation files (the
5136 // "Software"), to deal in the Software without restriction, including
5137 // without limitation the rights to use, copy, modify, merge, publish,
5138 // distribute, sublicense, and/or sell copies of the Software, and to permit
5139 // persons to whom the Software is furnished to do so, subject to the
5140 // following conditions:
5142 // The above copyright notice and this permission notice shall be included
5143 // in all copies or substantial portions of the Software.
5145 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5146 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5147 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5148 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5149 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5150 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5151 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5153 module.exports = Readable;
5156 var isArray = require('isarray');
5161 var Buffer = require('buffer').Buffer;
5164 Readable.ReadableState = ReadableState;
5166 var EE = require('events').EventEmitter;
5169 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5170 return emitter.listeners(type).length;
5174 var Stream = require('stream');
5177 var util = require('core-util-is');
5178 util.inherits = require('inherits');
5185 var debug = require('util');
5186 if (debug && debug.debuglog) {
5187 debug = debug.debuglog('stream');
5189 debug = function () {};
5194 util.inherits(Readable, Stream);
5196 function ReadableState(options, stream) {
5197 var Duplex = require('./_stream_duplex');
5199 options = options || {};
5201 // the point at which it stops calling _read() to fill the buffer
5202 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5203 var hwm = options.highWaterMark;
5204 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5205 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5208 this.highWaterMark = ~~this.highWaterMark;
5213 this.pipesCount =
0;
5214 this.flowing = null;
5216 this.endEmitted = false;
5217 this.reading = false;
5219 // a flag to be able to tell if the onwrite cb is called immediately,
5220 // or on a later tick. We set this to true at first, because any
5221 // actions that shouldn't happen until "later" should generally also
5222 // not happen before the first write call.
5225 // whenever we return null, then we set a flag to say
5226 // that we're awaiting a 'readable' event emission.
5227 this.needReadable = false;
5228 this.emittedReadable = false;
5229 this.readableListening = false;
5232 // object stream flag. Used to make read(n) ignore n and to
5233 // make all the buffer merging and length checks go away
5234 this.objectMode = !!options.objectMode;
5236 if (stream instanceof Duplex)
5237 this.objectMode = this.objectMode || !!options.readableObjectMode;
5239 // Crypto is kind of old and crusty. Historically, its default string
5240 // encoding is 'binary' so we have to make this configurable.
5241 // Everything else in the universe uses 'utf8', though.
5242 this.defaultEncoding = options.defaultEncoding || 'utf8';
5244 // when piping, we only care about 'readable' events that happen
5245 // after read()ing all the bytes and not getting any pushback.
5246 this.ranOut = false;
5248 // the number of writers that are awaiting a drain event in .pipe()s
5249 this.awaitDrain =
0;
5251 // if true, a maybeReadMore has been scheduled
5252 this.readingMore = false;
5254 this.decoder = null;
5255 this.encoding = null;
5256 if (options.encoding) {
5258 StringDecoder = require('string_decoder/').StringDecoder;
5259 this.decoder = new StringDecoder(options.encoding);
5260 this.encoding = options.encoding;
5264 function Readable(options) {
5265 var Duplex = require('./_stream_duplex');
5267 if (!(this instanceof Readable))
5268 return new Readable(options);
5270 this._readableState = new ReadableState(options, this);
5273 this.readable = true;
5278 // Manually shove something into the read() buffer.
5279 // This returns true if the highWaterMark has not been hit yet,
5280 // similar to how Writable.write() returns true if you should
5281 // write() some more.
5282 Readable.prototype.push = function(chunk, encoding) {
5283 var state = this._readableState;
5285 if (util.isString(chunk) && !state.objectMode) {
5286 encoding = encoding || state.defaultEncoding;
5287 if (encoding !== state.encoding) {
5288 chunk = new Buffer(chunk, encoding);
5293 return readableAddChunk(this, state, chunk, encoding, false);
5296 // Unshift should *always* be something directly out of read()
5297 Readable.prototype.unshift = function(chunk) {
5298 var state = this._readableState;
5299 return readableAddChunk(this, state, chunk, '', true);
5302 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5303 var er = chunkInvalid(state, chunk);
5305 stream.emit('error', er);
5306 } else if (util.isNullOrUndefined(chunk)) {
5307 state.reading = false;
5309 onEofChunk(stream, state);
5310 } else if (state.objectMode || chunk && chunk.length
> 0) {
5311 if (state.ended && !addToFront) {
5312 var e = new Error('stream.push() after EOF');
5313 stream.emit('error', e);
5314 } else if (state.endEmitted && addToFront) {
5315 var e = new Error('stream.unshift() after end event');
5316 stream.emit('error', e);
5318 if (state.decoder && !addToFront && !encoding)
5319 chunk = state.decoder.write(chunk);
5322 state.reading = false;
5324 // if we want the data now, just emit it.
5325 if (state.flowing && state.length ===
0 && !state.sync) {
5326 stream.emit('data', chunk);
5329 // update the buffer info.
5330 state.length += state.objectMode ?
1 : chunk.length;
5332 state.buffer.unshift(chunk);
5334 state.buffer.push(chunk);
5336 if (state.needReadable)
5337 emitReadable(stream);
5340 maybeReadMore(stream, state);
5342 } else if (!addToFront) {
5343 state.reading = false;
5346 return needMoreData(state);
5351 // if it's past the high water mark, we can push in some more.
5352 // Also, if we have no data yet, we can stand some
5353 // more bytes. This is to work around cases where hwm=
0,
5354 // such as the repl. Also, if the push() triggered a
5355 // readable event, and the user called read(largeNumber) such that
5356 // needReadable was set, then we ought to push more, so that another
5357 // 'readable' event will be triggered.
5358 function needMoreData(state) {
5359 return !state.ended &&
5360 (state.needReadable ||
5361 state.length < state.highWaterMark ||
5362 state.length ===
0);
5365 // backwards compatibility.
5366 Readable.prototype.setEncoding = function(enc) {
5368 StringDecoder = require('string_decoder/').StringDecoder;
5369 this._readableState.decoder = new StringDecoder(enc);
5370 this._readableState.encoding = enc;
5374 // Don't raise the hwm
> 128MB
5375 var MAX_HWM =
0x800000;
5376 function roundUpToNextPowerOf2(n) {
5380 // Get the next highest power of
2
5382 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5388 function howMuchToRead(n, state) {
5389 if (state.length ===
0 && state.ended)
5392 if (state.objectMode)
5393 return n ===
0 ?
0 :
1;
5395 if (isNaN(n) || util.isNull(n)) {
5396 // only flow one buffer at a time
5397 if (state.flowing && state.buffer.length)
5398 return state.buffer[
0].length;
5400 return state.length;
5406 // If we're asking for more than the target buffer level,
5407 // then raise the water mark. Bump up to the next highest
5408 // power of
2, to prevent increasing it excessively in tiny
5410 if (n
> state.highWaterMark)
5411 state.highWaterMark = roundUpToNextPowerOf2(n);
5413 // don't have that much. return null, unless we've ended.
5414 if (n
> state.length) {
5416 state.needReadable = true;
5419 return state.length;
5425 // you can override either this method, or the async _read(n) below.
5426 Readable.prototype.read = function(n) {
5428 var state = this._readableState;
5431 if (!util.isNumber(n) || n
> 0)
5432 state.emittedReadable = false;
5434 // if we're doing read(
0) to trigger a readable event, but we
5435 // already have a bunch of data in the buffer, then just trigger
5436 // the 'readable' event and move on.
5438 state.needReadable &&
5439 (state.length
>= state.highWaterMark || state.ended)) {
5440 debug('read: emitReadable', state.length, state.ended);
5441 if (state.length ===
0 && state.ended)
5448 n = howMuchToRead(n, state);
5450 // if we've ended, and we're now clear, then finish it up.
5451 if (n ===
0 && state.ended) {
5452 if (state.length ===
0)
5457 // All the actual chunk generation logic needs to be
5458 // *below* the call to _read. The reason is that in certain
5459 // synthetic stream cases, such as passthrough streams, _read
5460 // may be a completely synchronous operation which may change
5461 // the state of the read buffer, providing enough data when
5462 // before there was *not* enough.
5464 // So, the steps are:
5465 //
1. Figure out what the state of things will be after we do
5466 // a read from the buffer.
5468 //
2. If that resulting state will trigger a _read, then call _read.
5469 // Note that this may be asynchronous, or synchronous. Yes, it is
5470 // deeply ugly to write APIs this way, but that still doesn't mean
5471 // that the Readable class should behave improperly, as streams are
5472 // designed to be sync/async agnostic.
5473 // Take note if the _read call is sync or async (ie, if the read call
5474 // has returned yet), so that we know whether or not it's safe to emit
5477 //
3. Actually pull the requested chunks out of the buffer and return.
5479 // if we need a readable event, then we need to do some reading.
5480 var doRead = state.needReadable;
5481 debug('need readable', doRead);
5483 // if we currently have less than the highWaterMark, then also read some
5484 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5486 debug('length less than watermark', doRead);
5489 // however, if we've ended, then there's no point, and if we're already
5490 // reading, then it's unnecessary.
5491 if (state.ended || state.reading) {
5493 debug('reading or ended', doRead);
5498 state.reading = true;
5500 // if the length is currently zero, then we *need* a readable event.
5501 if (state.length ===
0)
5502 state.needReadable = true;
5503 // call internal read method
5504 this._read(state.highWaterMark);
5508 // If _read pushed data synchronously, then `reading` will be false,
5509 // and we need to re-evaluate how much data we can return to the user.
5510 if (doRead && !state.reading)
5511 n = howMuchToRead(nOrig, state);
5515 ret = fromList(n, state);
5519 if (util.isNull(ret)) {
5520 state.needReadable = true;
5526 // If we have nothing in the buffer, then we want to know
5527 // as soon as we *do* get something into the buffer.
5528 if (state.length ===
0 && !state.ended)
5529 state.needReadable = true;
5531 // If we tried to read() past the EOF, then emit end on the next tick.
5532 if (nOrig !== n && state.ended && state.length ===
0)
5535 if (!util.isNull(ret))
5536 this.emit('data', ret);
5541 function chunkInvalid(state, chunk) {
5543 if (!util.isBuffer(chunk) &&
5544 !util.isString(chunk) &&
5545 !util.isNullOrUndefined(chunk) &&
5546 !state.objectMode) {
5547 er = new TypeError('Invalid non-string/buffer chunk');
5553 function onEofChunk(stream, state) {
5554 if (state.decoder && !state.ended) {
5555 var chunk = state.decoder.end();
5556 if (chunk && chunk.length) {
5557 state.buffer.push(chunk);
5558 state.length += state.objectMode ?
1 : chunk.length;
5563 // emit 'readable' now to make sure it gets picked up.
5564 emitReadable(stream);
5567 // Don't emit readable right away in sync mode, because this can trigger
5568 // another read() call =
> stack overflow. This way, it might trigger
5569 // a nextTick recursion warning, but that's not so bad.
5570 function emitReadable(stream) {
5571 var state = stream._readableState;
5572 state.needReadable = false;
5573 if (!state.emittedReadable) {
5574 debug('emitReadable', state.flowing);
5575 state.emittedReadable = true;
5577 process.nextTick(function() {
5578 emitReadable_(stream);
5581 emitReadable_(stream);
5585 function emitReadable_(stream) {
5586 debug('emit readable');
5587 stream.emit('readable');
5592 // at this point, the user has presumably seen the 'readable' event,
5593 // and called read() to consume some data. that may have triggered
5594 // in turn another _read(n) call, in which case reading = true if
5595 // it's in progress.
5596 // However, if we're not ended, or reading, and the length < hwm,
5597 // then go ahead and try to read some more preemptively.
5598 function maybeReadMore(stream, state) {
5599 if (!state.readingMore) {
5600 state.readingMore = true;
5601 process.nextTick(function() {
5602 maybeReadMore_(stream, state);
5607 function maybeReadMore_(stream, state) {
5608 var len = state.length;
5609 while (!state.reading && !state.flowing && !state.ended &&
5610 state.length < state.highWaterMark) {
5611 debug('maybeReadMore read
0');
5613 if (len === state.length)
5614 // didn't get any data, stop spinning.
5619 state.readingMore = false;
5622 // abstract method. to be overridden in specific implementation classes.
5623 // call cb(er, data) where data is <= n in length.
5624 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5625 // arbitrary, and perhaps not very meaningful.
5626 Readable.prototype._read = function(n) {
5627 this.emit('error', new Error('not implemented'));
5630 Readable.prototype.pipe = function(dest, pipeOpts) {
5632 var state = this._readableState;
5634 switch (state.pipesCount) {
5639 state.pipes = [state.pipes, dest];
5642 state.pipes.push(dest);
5645 state.pipesCount +=
1;
5646 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5648 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5649 dest !== process.stdout &&
5650 dest !== process.stderr;
5652 var endFn = doEnd ? onend : cleanup;
5653 if (state.endEmitted)
5654 process.nextTick(endFn);
5656 src.once('end', endFn);
5658 dest.on('unpipe', onunpipe);
5659 function onunpipe(readable) {
5661 if (readable === src) {
5671 // when the dest drains, it reduces the awaitDrain counter
5672 // on the source. This would be more elegant with a .once()
5673 // handler in flow(), but adding and removing repeatedly is
5675 var ondrain = pipeOnDrain(src);
5676 dest.on('drain', ondrain);
5678 function cleanup() {
5680 // cleanup event handlers once the pipe is broken
5681 dest.removeListener('close', onclose);
5682 dest.removeListener('finish', onfinish);
5683 dest.removeListener('drain', ondrain);
5684 dest.removeListener('error', onerror);
5685 dest.removeListener('unpipe', onunpipe);
5686 src.removeListener('end', onend);
5687 src.removeListener('end', cleanup);
5688 src.removeListener('data', ondata);
5690 // if the reader is waiting for a drain event from this
5691 // specific writer, then it would cause it to never start
5693 // So, if this is awaiting a drain, then we just call it now.
5694 // If we don't know, then assume that we are waiting for one.
5695 if (state.awaitDrain &&
5696 (!dest._writableState || dest._writableState.needDrain))
5700 src.on('data', ondata);
5701 function ondata(chunk) {
5703 var ret = dest.write(chunk);
5704 if (false === ret) {
5705 debug('false write response, pause',
5706 src._readableState.awaitDrain);
5707 src._readableState.awaitDrain++;
5712 // if the dest has an error, then stop piping into it.
5713 // however, don't suppress the throwing behavior for this.
5714 function onerror(er) {
5715 debug('onerror', er);
5717 dest.removeListener('error', onerror);
5718 if (EE.listenerCount(dest, 'error') ===
0)
5719 dest.emit('error', er);
5721 // This is a brutally ugly hack to make sure that our error handler
5722 // is attached before any userland ones. NEVER DO THIS.
5723 if (!dest._events || !dest._events.error)
5724 dest.on('error', onerror);
5725 else if (isArray(dest._events.error))
5726 dest._events.error.unshift(onerror);
5728 dest._events.error = [onerror, dest._events.error];
5732 // Both close and finish should trigger unpipe, but only once.
5733 function onclose() {
5734 dest.removeListener('finish', onfinish);
5737 dest.once('close', onclose);
5738 function onfinish() {
5740 dest.removeListener('close', onclose);
5743 dest.once('finish', onfinish);
5750 // tell the dest that it's being piped to
5751 dest.emit('pipe', src);
5753 // start the flow if it hasn't been started already.
5754 if (!state.flowing) {
5755 debug('pipe resume');
5762 function pipeOnDrain(src) {
5764 var state = src._readableState;
5765 debug('pipeOnDrain', state.awaitDrain);
5766 if (state.awaitDrain)
5768 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5769 state.flowing = true;
5776 Readable.prototype.unpipe = function(dest) {
5777 var state = this._readableState;
5779 // if we're not piping anywhere, then do nothing.
5780 if (state.pipesCount ===
0)
5783 // just one destination. most common case.
5784 if (state.pipesCount ===
1) {
5785 // passed in one, but it's not the right one.
5786 if (dest && dest !== state.pipes)
5794 state.pipesCount =
0;
5795 state.flowing = false;
5797 dest.emit('unpipe', this);
5801 // slow case. multiple pipe destinations.
5805 var dests = state.pipes;
5806 var len = state.pipesCount;
5808 state.pipesCount =
0;
5809 state.flowing = false;
5811 for (var i =
0; i < len; i++)
5812 dests[i].emit('unpipe', this);
5816 // try to find the right one.
5817 var i = indexOf(state.pipes, dest);
5821 state.pipes.splice(i,
1);
5822 state.pipesCount -=
1;
5823 if (state.pipesCount ===
1)
5824 state.pipes = state.pipes[
0];
5826 dest.emit('unpipe', this);
5831 // set up data events if they are asked for
5832 // Ensure readable listeners eventually get something
5833 Readable.prototype.on = function(ev, fn) {
5834 var res = Stream.prototype.on.call(this, ev, fn);
5836 // If listening to data, and it has not explicitly been paused,
5837 // then call resume to start the flow of data on the next tick.
5838 if (ev === 'data' && false !== this._readableState.flowing) {
5842 if (ev === 'readable' && this.readable) {
5843 var state = this._readableState;
5844 if (!state.readableListening) {
5845 state.readableListening = true;
5846 state.emittedReadable = false;
5847 state.needReadable = true;
5848 if (!state.reading) {
5850 process.nextTick(function() {
5851 debug('readable nexttick read
0');
5854 } else if (state.length) {
5855 emitReadable(this, state);
5862 Readable.prototype.addListener = Readable.prototype.on;
5864 // pause() and resume() are remnants of the legacy readable stream API
5865 // If the user uses them, then switch into old mode.
5866 Readable.prototype.resume = function() {
5867 var state = this._readableState;
5868 if (!state.flowing) {
5870 state.flowing = true;
5871 if (!state.reading) {
5872 debug('resume read
0');
5875 resume(this, state);
5880 function resume(stream, state) {
5881 if (!state.resumeScheduled) {
5882 state.resumeScheduled = true;
5883 process.nextTick(function() {
5884 resume_(stream, state);
5889 function resume_(stream, state) {
5890 state.resumeScheduled = false;
5891 stream.emit('resume');
5893 if (state.flowing && !state.reading)
5897 Readable.prototype.pause = function() {
5898 debug('call pause flowing=%j', this._readableState.flowing);
5899 if (false !== this._readableState.flowing) {
5901 this._readableState.flowing = false;
5907 function flow(stream) {
5908 var state = stream._readableState;
5909 debug('flow', state.flowing);
5910 if (state.flowing) {
5912 var chunk = stream.read();
5913 } while (null !== chunk && state.flowing);
5917 // wrap an old-style stream as the async data source.
5918 // This is *not* part of the readable stream interface.
5919 // It is an ugly unfortunate mess of history.
5920 Readable.prototype.wrap = function(stream) {
5921 var state = this._readableState;
5925 stream.on('end', function() {
5926 debug('wrapped end');
5927 if (state.decoder && !state.ended) {
5928 var chunk = state.decoder.end();
5929 if (chunk && chunk.length)
5936 stream.on('data', function(chunk) {
5937 debug('wrapped data');
5939 chunk = state.decoder.write(chunk);
5940 if (!chunk || !state.objectMode && !chunk.length)
5943 var ret = self.push(chunk);
5950 // proxy all the other methods.
5951 // important when wrapping filters and duplexes.
5952 for (var i in stream) {
5953 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5954 this[i] = function(method) { return function() {
5955 return stream[method].apply(stream, arguments);
5960 // proxy certain important events.
5961 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5962 forEach(events, function(ev) {
5963 stream.on(ev, self.emit.bind(self, ev));
5966 // when we try to consume some more bytes, simply unpause the
5967 // underlying stream.
5968 self._read = function(n) {
5969 debug('wrapped _read', n);
5981 // exposed for testing purposes only.
5982 Readable._fromList = fromList;
5984 // Pluck off n bytes from an array of buffers.
5985 // Length is the combined lengths of all the buffers in the list.
5986 function fromList(n, state) {
5987 var list = state.buffer;
5988 var length = state.length;
5989 var stringMode = !!state.decoder;
5990 var objectMode = !!state.objectMode;
5993 // nothing in the list, definitely empty.
5994 if (list.length ===
0)
5999 else if (objectMode)
6001 else if (!n || n
>= length) {
6002 // read it all, truncate the array.
6004 ret = list.join('');
6006 ret = Buffer.concat(list, length);
6009 // read just some of it.
6010 if (n < list[
0].length) {
6011 // just take a part of the first list item.
6012 // slice is the same for buffers and strings.
6014 ret = buf.slice(
0, n);
6015 list[
0] = buf.slice(n);
6016 } else if (n === list[
0].length) {
6017 // first list is a perfect match
6021 // we have enough to cover it, but it spans past the first buffer.
6025 ret = new Buffer(n);
6028 for (var i =
0, l = list.length; i < l && c < n; i++) {
6030 var cpy = Math.min(n - c, buf.length);
6033 ret += buf.slice(
0, cpy);
6035 buf.copy(ret, c,
0, cpy);
6037 if (cpy < buf.length)
6038 list[
0] = buf.slice(cpy);
6050 function endReadable(stream) {
6051 var state = stream._readableState;
6053 // If we get here before consuming all the bytes, then that is a
6054 // bug in node. Should never happen.
6055 if (state.length
> 0)
6056 throw new Error('endReadable called on non-empty stream');
6058 if (!state.endEmitted) {
6060 process.nextTick(function() {
6061 // Check that we didn't get one last unshift.
6062 if (!state.endEmitted && state.length ===
0) {
6063 state.endEmitted = true;
6064 stream.readable = false;
6071 function forEach (xs, f) {
6072 for (var i =
0, l = xs.length; i < l; i++) {
6077 function indexOf (xs, x) {
6078 for (var i =
0, l = xs.length; i < l; i++) {
6079 if (xs[i] === x) return i;
6084 }).call(this,require('_process'))
6085 },{
"./_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){
6086 // Copyright Joyent, Inc. and other Node contributors.
6088 // Permission is hereby granted, free of charge, to any person obtaining a
6089 // copy of this software and associated documentation files (the
6090 //
"Software"), to deal in the Software without restriction, including
6091 // without limitation the rights to use, copy, modify, merge, publish,
6092 // distribute, sublicense, and/or sell copies of the Software, and to permit
6093 // persons to whom the Software is furnished to do so, subject to the
6094 // following conditions:
6096 // The above copyright notice and this permission notice shall be included
6097 // in all copies or substantial portions of the Software.
6099 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6100 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6101 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6102 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6103 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6104 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6105 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6108 // a transform stream is a readable/writable stream where you do
6109 // something with the data. Sometimes it's called a
"filter",
6110 // but that's not a great name for it, since that implies a thing where
6111 // some bits pass through, and others are simply ignored. (That would
6112 // be a valid example of a transform, of course.)
6114 // While the output is causally related to the input, it's not a
6115 // necessarily symmetric or synchronous transformation. For example,
6116 // a zlib stream might take multiple plain-text writes(), and then
6117 // emit a single compressed chunk some time in the future.
6119 // Here's how this works:
6121 // The Transform stream has all the aspects of the readable and writable
6122 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6123 // internally, and returns false if there's a lot of pending writes
6124 // buffered up. When you call read(), that calls _read(n) until
6125 // there's enough pending readable data buffered up.
6127 // In a transform stream, the written data is placed in a buffer. When
6128 // _read(n) is called, it transforms the queued up data, calling the
6129 // buffered _write cb's as it consumes chunks. If consuming a single
6130 // written chunk would result in multiple output chunks, then the first
6131 // outputted bit calls the readcb, and subsequent chunks just go into
6132 // the read buffer, and will cause it to emit 'readable' if necessary.
6134 // This way, back-pressure is actually determined by the reading side,
6135 // since _read has to be called to start processing a new chunk. However,
6136 // a pathological inflate type of transform can cause excessive buffering
6137 // here. For example, imagine a stream where every byte of input is
6138 // interpreted as an integer from
0-
255, and then results in that many
6139 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6140 //
1kb of data being output. In this case, you could write a very small
6141 // amount of input, and end up with a very large amount of output. In
6142 // such a pathological inflating mechanism, there'd be no way to tell
6143 // the system to stop doing the transform. A single
4MB write could
6144 // cause the system to run out of memory.
6146 // However, even in such a pathological case, only a single written chunk
6147 // would be consumed, and then the rest would wait (un-transformed) until
6148 // the results of the previous transformed chunk were consumed.
6150 module.exports = Transform;
6152 var Duplex = require('./_stream_duplex');
6155 var util = require('core-util-is');
6156 util.inherits = require('inherits');
6159 util.inherits(Transform, Duplex);
6162 function TransformState(options, stream) {
6163 this.afterTransform = function(er, data) {
6164 return afterTransform(stream, er, data);
6167 this.needTransform = false;
6168 this.transforming = false;
6169 this.writecb = null;
6170 this.writechunk = null;
6173 function afterTransform(stream, er, data) {
6174 var ts = stream._transformState;
6175 ts.transforming = false;
6177 var cb = ts.writecb;
6180 return stream.emit('error', new Error('no writecb in Transform class'));
6182 ts.writechunk = null;
6185 if (!util.isNullOrUndefined(data))
6191 var rs = stream._readableState;
6193 if (rs.needReadable || rs.length < rs.highWaterMark) {
6194 stream._read(rs.highWaterMark);
6199 function Transform(options) {
6200 if (!(this instanceof Transform))
6201 return new Transform(options);
6203 Duplex.call(this, options);
6205 this._transformState = new TransformState(options, this);
6207 // when the writable side finishes, then flush out anything remaining.
6210 // start out asking for a readable event once data is transformed.
6211 this._readableState.needReadable = true;
6213 // we have implemented the _read method, and done the other things
6214 // that Readable wants before the first _read call, so unset the
6216 this._readableState.sync = false;
6218 this.once('prefinish', function() {
6219 if (util.isFunction(this._flush))
6220 this._flush(function(er) {
6228 Transform.prototype.push = function(chunk, encoding) {
6229 this._transformState.needTransform = false;
6230 return Duplex.prototype.push.call(this, chunk, encoding);
6233 // This is the part where you do stuff!
6234 // override this function in implementation classes.
6235 // 'chunk' is an input chunk.
6237 // Call `push(newChunk)` to pass along transformed output
6238 // to the readable side. You may call 'push' zero or more times.
6240 // Call `cb(err)` when you are done with this chunk. If you pass
6241 // an error, then that'll put the hurt on the whole operation. If you
6242 // never call cb(), then you'll never get another chunk.
6243 Transform.prototype._transform = function(chunk, encoding, cb) {
6244 throw new Error('not implemented');
6247 Transform.prototype._write = function(chunk, encoding, cb) {
6248 var ts = this._transformState;
6250 ts.writechunk = chunk;
6251 ts.writeencoding = encoding;
6252 if (!ts.transforming) {
6253 var rs = this._readableState;
6254 if (ts.needTransform ||
6256 rs.length < rs.highWaterMark)
6257 this._read(rs.highWaterMark);
6261 // Doesn't matter what the args are here.
6262 // _transform does all the work.
6263 // That we got here means that the readable side wants more data.
6264 Transform.prototype._read = function(n) {
6265 var ts = this._transformState;
6267 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6268 ts.transforming = true;
6269 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6271 // mark that we need a transform, so that any data that comes in
6272 // will get processed, now that we've asked for it.
6273 ts.needTransform = true;
6278 function done(stream, er) {
6280 return stream.emit('error', er);
6282 // if there's nothing in the write buffer, then that means
6283 // that nothing more will ever be provided
6284 var ws = stream._writableState;
6285 var ts = stream._transformState;
6288 throw new Error('calling transform done when ws.length !=
0');
6290 if (ts.transforming)
6291 throw new Error('calling transform done when still transforming');
6293 return stream.push(null);
6296 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6297 (function (process){
6298 // Copyright Joyent, Inc. and other Node contributors.
6300 // Permission is hereby granted, free of charge, to any person obtaining a
6301 // copy of this software and associated documentation files (the
6302 // "Software"), to deal in the Software without restriction, including
6303 // without limitation the rights to use, copy, modify, merge, publish,
6304 // distribute, sublicense, and/or sell copies of the Software, and to permit
6305 // persons to whom the Software is furnished to do so, subject to the
6306 // following conditions:
6308 // The above copyright notice and this permission notice shall be included
6309 // in all copies or substantial portions of the Software.
6311 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6312 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6313 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6314 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6315 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6316 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6317 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6319 // A bit simpler than readable streams.
6320 // Implement an async ._write(chunk, cb), and it'll handle all
6321 // the drain event emission and buffering.
6323 module.exports = Writable;
6326 var Buffer = require('buffer').Buffer;
6329 Writable.WritableState = WritableState;
6333 var util = require('core-util-is');
6334 util.inherits = require('inherits');
6337 var Stream = require('stream');
6339 util.inherits(Writable, Stream);
6341 function WriteReq(chunk, encoding, cb) {
6343 this.encoding = encoding;
6347 function WritableState(options, stream) {
6348 var Duplex = require('./_stream_duplex');
6350 options = options || {};
6352 // the point at which write() starts returning false
6353 // Note:
0 is a valid value, means that we always return false if
6354 // the entire buffer is not flushed immediately on write()
6355 var hwm = options.highWaterMark;
6356 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6357 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6359 // object stream flag to indicate whether or not this stream
6360 // contains buffers or objects.
6361 this.objectMode = !!options.objectMode;
6363 if (stream instanceof Duplex)
6364 this.objectMode = this.objectMode || !!options.writableObjectMode;
6367 this.highWaterMark = ~~this.highWaterMark;
6369 this.needDrain = false;
6370 // at the start of calling end()
6371 this.ending = false;
6372 // when end() has been called, and returned
6374 // when 'finish' is emitted
6375 this.finished = false;
6377 // should we decode strings into buffers before passing to _write?
6378 // this is here so that some node-core streams can optimize string
6379 // handling at a lower level.
6380 var noDecode = options.decodeStrings === false;
6381 this.decodeStrings = !noDecode;
6383 // Crypto is kind of old and crusty. Historically, its default string
6384 // encoding is 'binary' so we have to make this configurable.
6385 // Everything else in the universe uses 'utf8', though.
6386 this.defaultEncoding = options.defaultEncoding || 'utf8';
6388 // not an actual buffer we keep track of, but a measurement
6389 // of how much we're waiting to get pushed to some underlying
6393 // a flag to see when we're in the middle of a write.
6394 this.writing = false;
6396 // when true all writes will be buffered until .uncork() call
6399 // a flag to be able to tell if the onwrite cb is called immediately,
6400 // or on a later tick. We set this to true at first, because any
6401 // actions that shouldn't happen until "later" should generally also
6402 // not happen before the first write call.
6405 // a flag to know if we're processing previously buffered items, which
6406 // may call the _write() callback in the same tick, so that we don't
6407 // end up in an overlapped onwrite situation.
6408 this.bufferProcessing = false;
6410 // the callback that's passed to _write(chunk,cb)
6411 this.onwrite = function(er) {
6412 onwrite(stream, er);
6415 // the callback that the user supplies to write(chunk,encoding,cb)
6416 this.writecb = null;
6418 // the amount that is being written when _write is called.
6423 // number of pending user-supplied write callbacks
6424 // this must be
0 before 'finish' can be emitted
6427 // emit prefinish if the only thing we're waiting for is _write cbs
6428 // This is relevant for synchronous Transform streams
6429 this.prefinished = false;
6431 // True if the error was already emitted and should not be thrown again
6432 this.errorEmitted = false;
6435 function Writable(options) {
6436 var Duplex = require('./_stream_duplex');
6438 // Writable ctor is applied to Duplexes, though they're not
6439 // instanceof Writable, they're instanceof Readable.
6440 if (!(this instanceof Writable) && !(this instanceof Duplex))
6441 return new Writable(options);
6443 this._writableState = new WritableState(options, this);
6446 this.writable = true;
6451 // Otherwise people can pipe Writable streams, which is just wrong.
6452 Writable.prototype.pipe = function() {
6453 this.emit('error', new Error('Cannot pipe. Not readable.'));
6457 function writeAfterEnd(stream, state, cb) {
6458 var er = new Error('write after end');
6459 // TODO: defer error events consistently everywhere, not just the cb
6460 stream.emit('error', er);
6461 process.nextTick(function() {
6466 // If we get something that is not a buffer, string, null, or undefined,
6467 // and we're not in objectMode, then that's an error.
6468 // Otherwise stream chunks are all considered to be of length=
1, and the
6469 // watermarks determine how many objects to keep in the buffer, rather than
6470 // how many bytes or characters.
6471 function validChunk(stream, state, chunk, cb) {
6473 if (!util.isBuffer(chunk) &&
6474 !util.isString(chunk) &&
6475 !util.isNullOrUndefined(chunk) &&
6476 !state.objectMode) {
6477 var er = new TypeError('Invalid non-string/buffer chunk');
6478 stream.emit('error', er);
6479 process.nextTick(function() {
6487 Writable.prototype.write = function(chunk, encoding, cb) {
6488 var state = this._writableState;
6491 if (util.isFunction(encoding)) {
6496 if (util.isBuffer(chunk))
6497 encoding = 'buffer';
6499 encoding = state.defaultEncoding;
6501 if (!util.isFunction(cb))
6505 writeAfterEnd(this, state, cb);
6506 else if (validChunk(this, state, chunk, cb)) {
6508 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6514 Writable.prototype.cork = function() {
6515 var state = this._writableState;
6520 Writable.prototype.uncork = function() {
6521 var state = this._writableState;
6526 if (!state.writing &&
6529 !state.bufferProcessing &&
6530 state.buffer.length)
6531 clearBuffer(this, state);
6535 function decodeChunk(state, chunk, encoding) {
6536 if (!state.objectMode &&
6537 state.decodeStrings !== false &&
6538 util.isString(chunk)) {
6539 chunk = new Buffer(chunk, encoding);
6544 // if we're already writing something, then just put this
6545 // in the queue, and wait our turn. Otherwise, call _write
6546 // If we return false, then we need a drain event, so set that flag.
6547 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6548 chunk = decodeChunk(state, chunk, encoding);
6549 if (util.isBuffer(chunk))
6550 encoding = 'buffer';
6551 var len = state.objectMode ?
1 : chunk.length;
6553 state.length += len;
6555 var ret = state.length < state.highWaterMark;
6556 // we must ensure that previous needDrain will not be reset to false.
6558 state.needDrain = true;
6560 if (state.writing || state.corked)
6561 state.buffer.push(new WriteReq(chunk, encoding, cb));
6563 doWrite(stream, state, false, len, chunk, encoding, cb);
6568 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6569 state.writelen = len;
6571 state.writing = true;
6574 stream._writev(chunk, state.onwrite);
6576 stream._write(chunk, encoding, state.onwrite);
6580 function onwriteError(stream, state, sync, er, cb) {
6582 process.nextTick(function() {
6591 stream._writableState.errorEmitted = true;
6592 stream.emit('error', er);
6595 function onwriteStateUpdate(state) {
6596 state.writing = false;
6597 state.writecb = null;
6598 state.length -= state.writelen;
6602 function onwrite(stream, er) {
6603 var state = stream._writableState;
6604 var sync = state.sync;
6605 var cb = state.writecb;
6607 onwriteStateUpdate(state);
6610 onwriteError(stream, state, sync, er, cb);
6612 // Check if we're actually ready to finish, but don't emit yet
6613 var finished = needFinish(stream, state);
6617 !state.bufferProcessing &&
6618 state.buffer.length) {
6619 clearBuffer(stream, state);
6623 process.nextTick(function() {
6624 afterWrite(stream, state, finished, cb);
6627 afterWrite(stream, state, finished, cb);
6632 function afterWrite(stream, state, finished, cb) {
6634 onwriteDrain(stream, state);
6637 finishMaybe(stream, state);
6640 // Must force callback to be called on nextTick, so that we don't
6641 // emit 'drain' before the write() consumer gets the 'false' return
6642 // value, and has a chance to attach a 'drain' listener.
6643 function onwriteDrain(stream, state) {
6644 if (state.length ===
0 && state.needDrain) {
6645 state.needDrain = false;
6646 stream.emit('drain');
6651 // if there's something in the buffer waiting, then process it
6652 function clearBuffer(stream, state) {
6653 state.bufferProcessing = true;
6655 if (stream._writev && state.buffer.length
> 1) {
6656 // Fast case, write everything using _writev()
6658 for (var c =
0; c < state.buffer.length; c++)
6659 cbs.push(state.buffer[c].callback);
6661 // count the one we are adding, as well.
6662 // TODO(isaacs) clean this up
6664 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6665 for (var i =
0; i < cbs.length; i++) {
6674 // Slow case, write chunks one-by-one
6675 for (var c =
0; c < state.buffer.length; c++) {
6676 var entry = state.buffer[c];
6677 var chunk = entry.chunk;
6678 var encoding = entry.encoding;
6679 var cb = entry.callback;
6680 var len = state.objectMode ?
1 : chunk.length;
6682 doWrite(stream, state, false, len, chunk, encoding, cb);
6684 // if we didn't call the onwrite immediately, then
6685 // it means that we need to wait until it does.
6686 // also, that means that the chunk and cb are currently
6687 // being processed, so move the buffer counter past them.
6688 if (state.writing) {
6694 if (c < state.buffer.length)
6695 state.buffer = state.buffer.slice(c);
6697 state.buffer.length =
0;
6700 state.bufferProcessing = false;
6703 Writable.prototype._write = function(chunk, encoding, cb) {
6704 cb(new Error('not implemented'));
6708 Writable.prototype._writev = null;
6710 Writable.prototype.end = function(chunk, encoding, cb) {
6711 var state = this._writableState;
6713 if (util.isFunction(chunk)) {
6717 } else if (util.isFunction(encoding)) {
6722 if (!util.isNullOrUndefined(chunk))
6723 this.write(chunk, encoding);
6725 // .end() fully uncorks
6731 // ignore unnecessary end() calls.
6732 if (!state.ending && !state.finished)
6733 endWritable(this, state, cb);
6737 function needFinish(stream, state) {
6738 return (state.ending &&
6739 state.length ===
0 &&
6744 function prefinish(stream, state) {
6745 if (!state.prefinished) {
6746 state.prefinished = true;
6747 stream.emit('prefinish');
6751 function finishMaybe(stream, state) {
6752 var need = needFinish(stream, state);
6754 if (state.pendingcb ===
0) {
6755 prefinish(stream, state);
6756 state.finished = true;
6757 stream.emit('finish');
6759 prefinish(stream, state);
6764 function endWritable(stream, state, cb) {
6765 state.ending = true;
6766 finishMaybe(stream, state);
6769 process.nextTick(cb);
6771 stream.once('finish', cb);
6776 }).call(this,require('_process'))
6777 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6779 // Copyright Joyent, Inc. and other Node contributors.
6781 // Permission is hereby granted, free of charge, to any person obtaining a
6782 // copy of this software and associated documentation files (the
6783 //
"Software"), to deal in the Software without restriction, including
6784 // without limitation the rights to use, copy, modify, merge, publish,
6785 // distribute, sublicense, and/or sell copies of the Software, and to permit
6786 // persons to whom the Software is furnished to do so, subject to the
6787 // following conditions:
6789 // The above copyright notice and this permission notice shall be included
6790 // in all copies or substantial portions of the Software.
6792 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6793 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6794 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6795 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6796 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6797 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6798 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6800 // NOTE: These type checking functions intentionally don't use `instanceof`
6801 // because it is fragile and can be easily faked with `Object.create()`.
6802 function isArray(ar) {
6803 return Array.isArray(ar);
6805 exports.isArray = isArray;
6807 function isBoolean(arg) {
6808 return typeof arg === 'boolean';
6810 exports.isBoolean = isBoolean;
6812 function isNull(arg) {
6813 return arg === null;
6815 exports.isNull = isNull;
6817 function isNullOrUndefined(arg) {
6820 exports.isNullOrUndefined = isNullOrUndefined;
6822 function isNumber(arg) {
6823 return typeof arg === 'number';
6825 exports.isNumber = isNumber;
6827 function isString(arg) {
6828 return typeof arg === 'string';
6830 exports.isString = isString;
6832 function isSymbol(arg) {
6833 return typeof arg === 'symbol';
6835 exports.isSymbol = isSymbol;
6837 function isUndefined(arg) {
6838 return arg === void
0;
6840 exports.isUndefined = isUndefined;
6842 function isRegExp(re) {
6843 return isObject(re) && objectToString(re) === '[object RegExp]';
6845 exports.isRegExp = isRegExp;
6847 function isObject(arg) {
6848 return typeof arg === 'object' && arg !== null;
6850 exports.isObject = isObject;
6852 function isDate(d) {
6853 return isObject(d) && objectToString(d) === '[object Date]';
6855 exports.isDate = isDate;
6857 function isError(e) {
6858 return isObject(e) &&
6859 (objectToString(e) === '[object Error]' || e instanceof Error);
6861 exports.isError = isError;
6863 function isFunction(arg) {
6864 return typeof arg === 'function';
6866 exports.isFunction = isFunction;
6868 function isPrimitive(arg) {
6869 return arg === null ||
6870 typeof arg === 'boolean' ||
6871 typeof arg === 'number' ||
6872 typeof arg === 'string' ||
6873 typeof arg === 'symbol' || // ES6 symbol
6874 typeof arg === 'undefined';
6876 exports.isPrimitive = isPrimitive;
6878 function isBuffer(arg) {
6879 return Buffer.isBuffer(arg);
6881 exports.isBuffer = isBuffer;
6883 function objectToString(o) {
6884 return Object.prototype.toString.call(o);
6886 }).call(this,require(
"buffer").Buffer)
6887 },{
"buffer":
7}],
22:[function(require,module,exports){
6888 module.exports = require(
"./lib/_stream_passthrough.js")
6890 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6891 exports = module.exports = require('./lib/_stream_readable.js');
6892 exports.Stream = require('stream');
6893 exports.Readable = exports;
6894 exports.Writable = require('./lib/_stream_writable.js');
6895 exports.Duplex = require('./lib/_stream_duplex.js');
6896 exports.Transform = require('./lib/_stream_transform.js');
6897 exports.PassThrough = require('./lib/_stream_passthrough.js');
6899 },{
"./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){
6900 module.exports = require(
"./lib/_stream_transform.js")
6902 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6903 module.exports = require(
"./lib/_stream_writable.js")
6905 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6906 // Copyright Joyent, Inc. and other Node contributors.
6908 // Permission is hereby granted, free of charge, to any person obtaining a
6909 // copy of this software and associated documentation files (the
6910 //
"Software"), to deal in the Software without restriction, including
6911 // without limitation the rights to use, copy, modify, merge, publish,
6912 // distribute, sublicense, and/or sell copies of the Software, and to permit
6913 // persons to whom the Software is furnished to do so, subject to the
6914 // following conditions:
6916 // The above copyright notice and this permission notice shall be included
6917 // in all copies or substantial portions of the Software.
6919 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6920 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6921 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6922 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6923 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6924 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6925 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6927 module.exports = Stream;
6929 var EE = require('events').EventEmitter;
6930 var inherits = require('inherits');
6932 inherits(Stream, EE);
6933 Stream.Readable = require('readable-stream/readable.js');
6934 Stream.Writable = require('readable-stream/writable.js');
6935 Stream.Duplex = require('readable-stream/duplex.js');
6936 Stream.Transform = require('readable-stream/transform.js');
6937 Stream.PassThrough = require('readable-stream/passthrough.js');
6939 // Backwards-compat with node
0.4.x
6940 Stream.Stream = Stream;
6944 // old-style streams. Note that the pipe method (the only relevant
6945 // part of this class) is overridden in the Readable class.
6951 Stream.prototype.pipe = function(dest, options) {
6954 function ondata(chunk) {
6955 if (dest.writable) {
6956 if (false === dest.write(chunk) && source.pause) {
6962 source.on('data', ondata);
6964 function ondrain() {
6965 if (source.readable && source.resume) {
6970 dest.on('drain', ondrain);
6972 // If the 'end' option is not supplied, dest.end() will be called when
6973 // source gets the 'end' or 'close' events. Only dest.end() once.
6974 if (!dest._isStdio && (!options || options.end !== false)) {
6975 source.on('end', onend);
6976 source.on('close', onclose);
6979 var didOnEnd = false;
6981 if (didOnEnd) return;
6988 function onclose() {
6989 if (didOnEnd) return;
6992 if (typeof dest.destroy === 'function') dest.destroy();
6995 // don't leave dangling pipes when there are errors.
6996 function onerror(er) {
6998 if (EE.listenerCount(this, 'error') ===
0) {
6999 throw er; // Unhandled stream error in pipe.
7003 source.on('error', onerror);
7004 dest.on('error', onerror);
7006 // remove all the event listeners that were added.
7007 function cleanup() {
7008 source.removeListener('data', ondata);
7009 dest.removeListener('drain', ondrain);
7011 source.removeListener('end', onend);
7012 source.removeListener('close', onclose);
7014 source.removeListener('error', onerror);
7015 dest.removeListener('error', onerror);
7017 source.removeListener('end', cleanup);
7018 source.removeListener('close', cleanup);
7020 dest.removeListener('close', cleanup);
7023 source.on('end', cleanup);
7024 source.on('close', cleanup);
7026 dest.on('close', cleanup);
7028 dest.emit('pipe', source);
7030 // Allow for unix-like usage: A.pipe(B).pipe(C)
7034 },{
"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){
7035 // Copyright Joyent, Inc. and other Node contributors.
7037 // Permission is hereby granted, free of charge, to any person obtaining a
7038 // copy of this software and associated documentation files (the
7039 //
"Software"), to deal in the Software without restriction, including
7040 // without limitation the rights to use, copy, modify, merge, publish,
7041 // distribute, sublicense, and/or sell copies of the Software, and to permit
7042 // persons to whom the Software is furnished to do so, subject to the
7043 // following conditions:
7045 // The above copyright notice and this permission notice shall be included
7046 // in all copies or substantial portions of the Software.
7048 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7049 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7050 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7051 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7052 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7053 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7054 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7056 var Buffer = require('buffer').Buffer;
7058 var isBufferEncoding = Buffer.isEncoding
7059 || function(encoding) {
7060 switch (encoding && encoding.toLowerCase()) {
7061 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;
7062 default: return false;
7067 function assertEncoding(encoding) {
7068 if (encoding && !isBufferEncoding(encoding)) {
7069 throw new Error('Unknown encoding: ' + encoding);
7073 // StringDecoder provides an interface for efficiently splitting a series of
7074 // buffers into a series of JS strings without breaking apart multi-byte
7075 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
7077 // @TODO Handling all encodings inside a single object makes it very difficult
7078 // to reason about this code, so it should be split up in the future.
7079 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
7080 // points as used by CESU-
8.
7081 var StringDecoder = exports.StringDecoder = function(encoding) {
7082 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7083 assertEncoding(encoding);
7084 switch (this.encoding) {
7086 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7087 this.surrogateSize =
3;
7091 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7092 this.surrogateSize =
2;
7093 this.detectIncompleteChar = utf16DetectIncompleteChar;
7096 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7097 this.surrogateSize =
3;
7098 this.detectIncompleteChar = base64DetectIncompleteChar;
7101 this.write = passThroughWrite;
7105 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7106 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7107 this.charBuffer = new Buffer(
6);
7108 // Number of bytes received for the current incomplete multi-byte character.
7109 this.charReceived =
0;
7110 // Number of bytes expected for the current incomplete multi-byte character.
7111 this.charLength =
0;
7115 // write decodes the given buffer and returns it as JS string that is
7116 // guaranteed to not contain any partial multi-byte characters. Any partial
7117 // character found at the end of the buffer is buffered up, and will be
7118 // returned when calling write again with the remaining bytes.
7120 // Note: Converting a Buffer containing an orphan surrogate to a String
7121 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7122 // Buffer#write) will replace incomplete surrogates with the unicode
7123 // replacement character. See https://codereview.chromium.org/
121173009/ .
7124 StringDecoder.prototype.write = function(buffer) {
7126 // if our last write ended with an incomplete multibyte character
7127 while (this.charLength) {
7128 // determine how many remaining bytes this buffer has to offer for this char
7129 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7130 this.charLength - this.charReceived :
7133 // add the new bytes to the char buffer
7134 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7135 this.charReceived += available;
7137 if (this.charReceived < this.charLength) {
7138 // still not enough chars in this buffer? wait for more ...
7142 // remove bytes belonging to the current character from the buffer
7143 buffer = buffer.slice(available, buffer.length);
7145 // get the character that was split
7146 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7148 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7149 var charCode = charStr.charCodeAt(charStr.length -
1);
7150 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7151 this.charLength += this.surrogateSize;
7155 this.charReceived = this.charLength =
0;
7157 // if there are no more bytes in this buffer, just emit our char
7158 if (buffer.length ===
0) {
7164 // determine and set charLength / charReceived
7165 this.detectIncompleteChar(buffer);
7167 var end = buffer.length;
7168 if (this.charLength) {
7169 // buffer the incomplete character bytes we got
7170 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7171 end -= this.charReceived;
7174 charStr += buffer.toString(this.encoding,
0, end);
7176 var end = charStr.length -
1;
7177 var charCode = charStr.charCodeAt(end);
7178 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7179 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7180 var size = this.surrogateSize;
7181 this.charLength += size;
7182 this.charReceived += size;
7183 this.charBuffer.copy(this.charBuffer, size,
0, size);
7184 buffer.copy(this.charBuffer,
0,
0, size);
7185 return charStr.substring(
0, end);
7188 // or just emit the charStr
7192 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7193 // the end of the given buffer. If so, it sets this.charLength to the byte
7194 // length that character, and sets this.charReceived to the number of bytes
7195 // that are available for this character.
7196 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7197 // determine how many bytes we have to check at the end of this buffer
7198 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7200 // Figure out if one of the last i bytes of our buffer announces an
7202 for (; i
> 0; i--) {
7203 var c = buffer[buffer.length - i];
7205 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7208 if (i ==
1 && c
>> 5 ==
0x06) {
7209 this.charLength =
2;
7214 if (i <=
2 && c
>> 4 ==
0x0E) {
7215 this.charLength =
3;
7220 if (i <=
3 && c
>> 3 ==
0x1E) {
7221 this.charLength =
4;
7225 this.charReceived = i;
7228 StringDecoder.prototype.end = function(buffer) {
7230 if (buffer && buffer.length)
7231 res = this.write(buffer);
7233 if (this.charReceived) {
7234 var cr = this.charReceived;
7235 var buf = this.charBuffer;
7236 var enc = this.encoding;
7237 res += buf.slice(
0, cr).toString(enc);
7243 function passThroughWrite(buffer) {
7244 return buffer.toString(this.encoding);
7247 function utf16DetectIncompleteChar(buffer) {
7248 this.charReceived = buffer.length %
2;
7249 this.charLength = this.charReceived ?
2 :
0;
7252 function base64DetectIncompleteChar(buffer) {
7253 this.charReceived = buffer.length %
3;
7254 this.charLength = this.charReceived ?
3 :
0;
7257 },{
"buffer":
7}],
28:[function(require,module,exports){
7258 module.exports = function isBuffer(arg) {
7259 return arg && typeof arg === 'object'
7260 && typeof arg.copy === 'function'
7261 && typeof arg.fill === 'function'
7262 && typeof arg.readUInt8 === 'function';
7264 },{}],
29:[function(require,module,exports){
7265 (function (process,global){
7266 // Copyright Joyent, Inc. and other Node contributors.
7268 // Permission is hereby granted, free of charge, to any person obtaining a
7269 // copy of this software and associated documentation files (the
7270 //
"Software"), to deal in the Software without restriction, including
7271 // without limitation the rights to use, copy, modify, merge, publish,
7272 // distribute, sublicense, and/or sell copies of the Software, and to permit
7273 // persons to whom the Software is furnished to do so, subject to the
7274 // following conditions:
7276 // The above copyright notice and this permission notice shall be included
7277 // in all copies or substantial portions of the Software.
7279 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7280 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7281 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7282 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7283 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7284 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7285 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7287 var formatRegExp = /%[sdj%]/g;
7288 exports.format = function(f) {
7291 for (var i =
0; i < arguments.length; i++) {
7292 objects.push(inspect(arguments[i]));
7294 return objects.join(' ');
7298 var args = arguments;
7299 var len = args.length;
7300 var str = String(f).replace(formatRegExp, function(x) {
7301 if (x === '%%') return '%';
7302 if (i
>= len) return x;
7304 case '%s': return String(args[i++]);
7305 case '%d': return Number(args[i++]);
7308 return JSON.stringify(args[i++]);
7310 return '[Circular]';
7316 for (var x = args[i]; i < len; x = args[++i]) {
7317 if (isNull(x) || !isObject(x)) {
7320 str += ' ' + inspect(x);
7327 // Mark that a method should not be used.
7328 // Returns a modified function which warns once by default.
7329 // If --no-deprecation is set, then it is a no-op.
7330 exports.deprecate = function(fn, msg) {
7331 // Allow for deprecating things in the process of starting up.
7332 if (isUndefined(global.process)) {
7334 return exports.deprecate(fn, msg).apply(this, arguments);
7338 if (process.noDeprecation === true) {
7343 function deprecated() {
7345 if (process.throwDeprecation) {
7346 throw new Error(msg);
7347 } else if (process.traceDeprecation) {
7354 return fn.apply(this, arguments);
7363 exports.debuglog = function(set) {
7364 if (isUndefined(debugEnviron))
7365 debugEnviron = process.env.NODE_DEBUG || '';
7366 set = set.toUpperCase();
7368 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7369 var pid = process.pid;
7370 debugs[set] = function() {
7371 var msg = exports.format.apply(exports, arguments);
7372 console.error('%s %d: %s', set, pid, msg);
7375 debugs[set] = function() {};
7383 * Echos the value of a value. Trys to print the value out
7384 * in the best way possible given the different types.
7386 * @param {Object} obj The object to print out.
7387 * @param {Object} opts Optional options object that alters the output.
7389 /* legacy: obj, showHidden, depth, colors*/
7390 function inspect(obj, opts) {
7394 stylize: stylizeNoColor
7397 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7398 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7399 if (isBoolean(opts)) {
7401 ctx.showHidden = opts;
7403 // got an "options" object
7404 exports._extend(ctx, opts);
7406 // set default options
7407 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7408 if (isUndefined(ctx.depth)) ctx.depth =
2;
7409 if (isUndefined(ctx.colors)) ctx.colors = false;
7410 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7411 if (ctx.colors) ctx.stylize = stylizeWithColor;
7412 return formatValue(ctx, obj, ctx.depth);
7414 exports.inspect = inspect;
7417 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7421 'underline' : [
4,
24],
7422 'inverse' : [
7,
27],
7429 'magenta' : [
35,
39],
7434 // Don't use 'blue' not visible on cmd.exe
7438 'boolean': 'yellow',
7439 'undefined': 'grey',
7443 // "name": intentionally not styling
7448 function stylizeWithColor(str, styleType) {
7449 var style = inspect.styles[styleType];
7452 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7453 '\u001b[' + inspect.colors[style][
1] + 'm';
7460 function stylizeNoColor(str, styleType) {
7465 function arrayToHash(array) {
7468 array.forEach(function(val, idx) {
7476 function formatValue(ctx, value, recurseTimes) {
7477 // Provide a hook for user-specified inspect functions.
7478 // Check that value is an object with an inspect function on it
7479 if (ctx.customInspect &&
7481 isFunction(value.inspect) &&
7482 // Filter out the util module, it's inspect function is special
7483 value.inspect !== exports.inspect &&
7484 // Also filter out any prototype objects using the circular check.
7485 !(value.constructor && value.constructor.prototype === value)) {
7486 var ret = value.inspect(recurseTimes, ctx);
7487 if (!isString(ret)) {
7488 ret = formatValue(ctx, ret, recurseTimes);
7493 // Primitive types cannot have properties
7494 var primitive = formatPrimitive(ctx, value);
7499 // Look up the keys of the object.
7500 var keys = Object.keys(value);
7501 var visibleKeys = arrayToHash(keys);
7503 if (ctx.showHidden) {
7504 keys = Object.getOwnPropertyNames(value);
7507 // IE doesn't make error fields non-enumerable
7508 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7510 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7511 return formatError(value);
7514 // Some type of object without properties can be shortcutted.
7515 if (keys.length ===
0) {
7516 if (isFunction(value)) {
7517 var name = value.name ? ': ' + value.name : '';
7518 return ctx.stylize('[Function' + name + ']', 'special');
7520 if (isRegExp(value)) {
7521 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7523 if (isDate(value)) {
7524 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7526 if (isError(value)) {
7527 return formatError(value);
7531 var base = '', array = false, braces = ['{', '}'];
7533 // Make Array say that they are Array
7534 if (isArray(value)) {
7536 braces = ['[', ']'];
7539 // Make functions say that they are functions
7540 if (isFunction(value)) {
7541 var n = value.name ? ': ' + value.name : '';
7542 base = ' [Function' + n + ']';
7545 // Make RegExps say that they are RegExps
7546 if (isRegExp(value)) {
7547 base = ' ' + RegExp.prototype.toString.call(value);
7550 // Make dates with properties first say the date
7551 if (isDate(value)) {
7552 base = ' ' + Date.prototype.toUTCString.call(value);
7555 // Make error with message first say the error
7556 if (isError(value)) {
7557 base = ' ' + formatError(value);
7560 if (keys.length ===
0 && (!array || value.length ==
0)) {
7561 return braces[
0] + base + braces[
1];
7564 if (recurseTimes <
0) {
7565 if (isRegExp(value)) {
7566 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7568 return ctx.stylize('[Object]', 'special');
7572 ctx.seen.push(value);
7576 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7578 output = keys.map(function(key) {
7579 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7585 return reduceToSingleString(output, base, braces);
7589 function formatPrimitive(ctx, value) {
7590 if (isUndefined(value))
7591 return ctx.stylize('undefined', 'undefined');
7592 if (isString(value)) {
7593 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7594 .replace(/'/g, "\\'")
7595 .replace(/\\"/g, '"') + '\'';
7596 return ctx.stylize(simple, 'string');
7598 if (isNumber(value))
7599 return ctx.stylize('' + value, 'number');
7600 if (isBoolean(value))
7601 return ctx.stylize('' + value, 'boolean');
7602 // For some reason typeof null is "object", so special case here.
7604 return ctx.stylize('null', 'null');
7608 function formatError(value) {
7609 return '[' + Error.prototype.toString.call(value) + ']';
7613 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7615 for (var i =
0, l = value.length; i < l; ++i) {
7616 if (hasOwnProperty(value, String(i))) {
7617 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7623 keys.forEach(function(key) {
7624 if (!key.match(/^\d+$/)) {
7625 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7633 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7634 var name, str, desc;
7635 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7638 str = ctx.stylize('[Getter/Setter]', 'special');
7640 str = ctx.stylize('[Getter]', 'special');
7644 str = ctx.stylize('[Setter]', 'special');
7647 if (!hasOwnProperty(visibleKeys, key)) {
7648 name = '[' + key + ']';
7651 if (ctx.seen.indexOf(desc.value) <
0) {
7652 if (isNull(recurseTimes)) {
7653 str = formatValue(ctx, desc.value, null);
7655 str = formatValue(ctx, desc.value, recurseTimes -
1);
7657 if (str.indexOf('\n')
> -
1) {
7659 str = str.split('\n').map(function(line) {
7661 }).join('\n').substr(
2);
7663 str = '\n' + str.split('\n').map(function(line) {
7669 str = ctx.stylize('[Circular]', 'special');
7672 if (isUndefined(name)) {
7673 if (array && key.match(/^\d+$/)) {
7676 name = JSON.stringify('' + key);
7677 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7678 name = name.substr(
1, name.length -
2);
7679 name = ctx.stylize(name, 'name');
7681 name = name.replace(/'/g, "\\'")
7682 .replace(/\\"/g, '"')
7683 .replace(/(^"|"$)/g, "'");
7684 name = ctx.stylize(name, 'string');
7688 return name + ': ' + str;
7692 function reduceToSingleString(output, base, braces) {
7693 var numLinesEst =
0;
7694 var length = output.reduce(function(prev, cur) {
7696 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7697 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7702 (base === '' ? '' : base + '\n ') +
7704 output.join(',\n ') +
7709 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7713 // NOTE: These type checking functions intentionally don't use `instanceof`
7714 // because it is fragile and can be easily faked with `Object.create()`.
7715 function isArray(ar) {
7716 return Array.isArray(ar);
7718 exports.isArray = isArray;
7720 function isBoolean(arg) {
7721 return typeof arg === 'boolean';
7723 exports.isBoolean = isBoolean;
7725 function isNull(arg) {
7726 return arg === null;
7728 exports.isNull = isNull;
7730 function isNullOrUndefined(arg) {
7733 exports.isNullOrUndefined = isNullOrUndefined;
7735 function isNumber(arg) {
7736 return typeof arg === 'number';
7738 exports.isNumber = isNumber;
7740 function isString(arg) {
7741 return typeof arg === 'string';
7743 exports.isString = isString;
7745 function isSymbol(arg) {
7746 return typeof arg === 'symbol';
7748 exports.isSymbol = isSymbol;
7750 function isUndefined(arg) {
7751 return arg === void
0;
7753 exports.isUndefined = isUndefined;
7755 function isRegExp(re) {
7756 return isObject(re) && objectToString(re) === '[object RegExp]';
7758 exports.isRegExp = isRegExp;
7760 function isObject(arg) {
7761 return typeof arg === 'object' && arg !== null;
7763 exports.isObject = isObject;
7765 function isDate(d) {
7766 return isObject(d) && objectToString(d) === '[object Date]';
7768 exports.isDate = isDate;
7770 function isError(e) {
7771 return isObject(e) &&
7772 (objectToString(e) === '[object Error]' || e instanceof Error);
7774 exports.isError = isError;
7776 function isFunction(arg) {
7777 return typeof arg === 'function';
7779 exports.isFunction = isFunction;
7781 function isPrimitive(arg) {
7782 return arg === null ||
7783 typeof arg === 'boolean' ||
7784 typeof arg === 'number' ||
7785 typeof arg === 'string' ||
7786 typeof arg === 'symbol' || // ES6 symbol
7787 typeof arg === 'undefined';
7789 exports.isPrimitive = isPrimitive;
7791 exports.isBuffer = require('./support/isBuffer');
7793 function objectToString(o) {
7794 return Object.prototype.toString.call(o);
7799 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7803 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7804 'Oct', 'Nov', 'Dec'];
7807 function timestamp() {
7809 var time = [pad(d.getHours()),
7810 pad(d.getMinutes()),
7811 pad(d.getSeconds())].join(':');
7812 return [d.getDate(), months[d.getMonth()], time].join(' ');
7816 // log is just a thin wrapper to console.log that prepends a timestamp
7817 exports.log = function() {
7818 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7823 * Inherit the prototype methods from one constructor into another.
7825 * The Function.prototype.inherits from lang.js rewritten as a standalone
7826 * function (not on Function.prototype). NOTE: If this file is to be loaded
7827 * during bootstrapping this function needs to be rewritten using some native
7828 * functions as prototype setup using normal JavaScript does not work as
7829 * expected during bootstrapping (see mirror.js in r114903).
7831 * @param {function} ctor Constructor function which needs to inherit the
7833 * @param {function} superCtor Constructor function to inherit prototype from.
7835 exports.inherits = require('inherits');
7837 exports._extend = function(origin, add) {
7838 // Don't do anything if add isn't an object
7839 if (!add || !isObject(add)) return origin;
7841 var keys = Object.keys(add);
7842 var i = keys.length;
7844 origin[keys[i]] = add[keys[i]];
7849 function hasOwnProperty(obj, prop) {
7850 return Object.prototype.hasOwnProperty.call(obj, prop);
7853 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7854 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7855 // Base58 encoding/decoding
7856 // Originally written by Mike Hearn for BitcoinJ
7857 // Copyright (c)
2011 Google Inc
7858 // Ported to JavaScript by Stefan Thomas
7859 // Merged Buffer refactorings from base58-native by Stephen Pair
7860 // Copyright (c)
2013 BitPay Inc
7862 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7863 var ALPHABET_MAP = {}
7864 for(var i =
0; i < ALPHABET.length; i++) {
7865 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7869 function encode(buffer) {
7870 if (buffer.length ===
0) return ''
7872 var i, j, digits = [
0]
7873 for (i =
0; i < buffer.length; i++) {
7874 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7876 digits[
0] += buffer[i]
7879 for (j =
0; j < digits.length; ++j) {
7882 carry = (digits[j] / BASE) |
0
7887 digits.push(carry % BASE)
7889 carry = (carry / BASE) |
0
7893 // deal with leading zeros
7894 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7896 // convert digits to a string
7897 var stringOutput =
""
7898 for (var i = digits.length -
1; i
>=
0; i--) {
7899 stringOutput = stringOutput + ALPHABET[digits[i]]
7904 function decode(string) {
7905 if (string.length ===
0) return []
7907 var i, j, bytes = [
0]
7908 for (i =
0; i < string.length; i++) {
7910 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7912 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7913 bytes[
0] += ALPHABET_MAP[c]
7916 for (j =
0; j < bytes.length; ++j) {
7919 carry = bytes[j]
>> 8
7924 bytes.push(carry &
0xff)
7930 // deal with leading zeros
7931 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7933 return bytes.reverse()
7941 },{}],
31:[function(require,module,exports){
7945 var base58 = require('bs58')
7946 var createHash = require('create-hash')
7948 // SHA256(SHA256(buffer))
7949 function sha256x2 (buffer) {
7950 buffer = createHash('sha256').update(buffer).digest()
7951 return createHash('sha256').update(buffer).digest()
7954 // Encode a buffer as a base58-check encoded string
7955 function encode (payload) {
7956 var checksum = sha256x2(payload).slice(
0,
4)
7958 return base58.encode(Buffer.concat([
7964 // Decode a base58-check encoded string to a buffer
7965 function decode (string) {
7966 var buffer = new Buffer(base58.decode(string))
7968 var payload = buffer.slice(
0, -
4)
7969 var checksum = buffer.slice(-
4)
7970 var newChecksum = sha256x2(payload).slice(
0,
4)
7972 for (var i =
0; i < newChecksum.length; ++i) {
7973 if (newChecksum[i] === checksum[i]) continue
7975 throw new Error('Invalid checksum')
7986 }).call(this,require("buffer").Buffer)
7987 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7990 var inherits = require('inherits')
7991 var md5 = require('./md5')
7992 var rmd160 = require('ripemd160')
7993 var sha = require('sha.js')
7995 var Transform = require('stream').Transform
7997 function HashNoConstructor(hash) {
7998 Transform.call(this)
8004 inherits(HashNoConstructor, Transform)
8006 HashNoConstructor.prototype._transform = function (data, _, next) {
8007 this.buffers.push(data)
8012 HashNoConstructor.prototype._flush = function (next) {
8013 this.push(this.digest())
8017 HashNoConstructor.prototype.update = function (data, enc) {
8018 if (typeof data === 'string') {
8019 data = new Buffer(data, enc)
8022 this.buffers.push(data)
8026 HashNoConstructor.prototype.digest = function (enc) {
8027 var buf = Buffer.concat(this.buffers)
8028 var r = this._hash(buf)
8031 return enc ? r.toString(enc) : r
8034 function Hash(hash) {
8035 Transform.call(this)
8040 inherits(Hash, Transform)
8042 Hash.prototype._transform = function (data, enc, next) {
8043 if (enc) data = new Buffer(data, enc)
8045 this._hash.update(data)
8050 Hash.prototype._flush = function (next) {
8051 this.push(this._hash.digest())
8057 Hash.prototype.update = function (data, enc) {
8058 if (typeof data === 'string') {
8059 data = new Buffer(data, enc)
8062 this._hash.update(data)
8066 Hash.prototype.digest = function (enc) {
8067 var outData = this._hash.digest()
8069 return enc ? outData.toString(enc) : outData
8072 module.exports = function createHash (alg) {
8073 if ('md5' === alg) return new HashNoConstructor(md5)
8074 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8076 return new Hash(sha(alg))
8079 }).call(this,require("buffer").Buffer)
8080 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
8084 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8087 function toArray(buf, bigEndian) {
8088 if ((buf.length % intSize) !==
0) {
8089 var len = buf.length + (intSize - (buf.length % intSize));
8090 buf = Buffer.concat([buf, zeroBuffer], len);
8094 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8095 for (var i =
0; i < buf.length; i += intSize) {
8096 arr.push(fn.call(buf, i));
8101 function toBuffer(arr, size, bigEndian) {
8102 var buf = new Buffer(size);
8103 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8104 for (var i =
0; i < arr.length; i++) {
8105 fn.call(buf, arr[i], i *
4, true);
8110 function hash(buf, fn, hashSize, bigEndian) {
8111 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8112 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8113 return toBuffer(arr, hashSize, bigEndian);
8115 exports.hash = hash;
8116 }).call(this,require("buffer").Buffer)
8117 },{"buffer":
7}],
34:[function(require,module,exports){
8120 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8121 * Digest Algorithm, as defined in RFC
1321.
8122 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8123 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8124 * Distributed under the BSD License
8125 * See http://pajhome.org.uk/crypt/md5 for more info.
8128 var helpers = require('./helpers');
8131 * Calculate the MD5 of an array of little-endian words, and a bit length
8133 function core_md5(x, len)
8135 /* append padding */
8136 x[len
>> 5] |=
0x80 << ((len) %
32);
8137 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8141 var c = -
1732584194;
8144 for(var i =
0; i < x.length; i +=
16)
8151 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8152 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8153 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8154 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8155 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8156 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8157 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8158 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8159 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8160 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8161 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8162 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8163 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8164 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8165 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8166 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8168 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8169 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8170 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8171 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8172 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8173 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8174 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8175 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8176 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8177 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8178 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8179 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8180 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8181 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8182 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8183 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8185 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8186 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8187 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8188 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8189 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8190 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8191 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8192 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8193 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8194 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8195 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8196 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8197 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8198 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8199 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8200 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8202 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8203 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8204 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8205 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8206 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8207 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8208 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8209 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8210 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8211 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8212 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8213 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8214 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8215 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8216 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8217 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8219 a = safe_add(a, olda);
8220 b = safe_add(b, oldb);
8221 c = safe_add(c, oldc);
8222 d = safe_add(d, oldd);
8224 return Array(a, b, c, d);
8229 * These functions implement the four basic operations the algorithm uses.
8231 function md5_cmn(q, a, b, x, s, t)
8233 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8235 function md5_ff(a, b, c, d, x, s, t)
8237 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8239 function md5_gg(a, b, c, d, x, s, t)
8241 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8243 function md5_hh(a, b, c, d, x, s, t)
8245 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8247 function md5_ii(a, b, c, d, x, s, t)
8249 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8253 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8254 * to work around bugs in some JS interpreters.
8256 function safe_add(x, y)
8258 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8259 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8260 return (msw <<
16) | (lsw &
0xFFFF);
8264 * Bitwise rotate a
32-bit number to the left.
8266 function bit_rol(num, cnt)
8268 return (num << cnt) | (num
>>> (
32 - cnt));
8271 module.exports = function md5(buf) {
8272 return helpers.hash(buf, core_md5,
16);
8274 },{"./helpers":
33}],
35:[function(require,module,exports){
8275 arguments[
4][
12][
0].apply(exports,arguments)
8276 },{"dup":
12}],
36:[function(require,module,exports){
8280 code.google.com/p/crypto-js
8281 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8282 code.google.com/p/crypto-js/wiki/License
8285 (c)
2012 by Cédric Mesnil. All rights reserved.
8287 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8289 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8290 - 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.
8292 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.
8297 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8298 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8299 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8300 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8301 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8305 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8306 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8307 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8308 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8309 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8313 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8314 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8315 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8316 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8317 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8321 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8322 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8323 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8324 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8325 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8328 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8329 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8331 function bytesToWords (bytes) {
8333 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8334 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8339 function wordsToBytes (words) {
8341 for (var b =
0; b < words.length *
32; b +=
8) {
8342 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8347 function processBlock (H, M, offset) {
8349 for (var i =
0; i <
16; i++) {
8350 var offset_i = offset + i
8351 var M_offset_i = M[offset_i]
8355 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8356 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8360 // Working variables
8361 var al, bl, cl, dl, el
8362 var ar, br, cr, dr, er
8372 for (i =
0; i <
80; i +=
1) {
8373 t = (al + M[offset + zl[i]]) |
0
8375 t += f1(bl, cl, dl) + hl[
0]
8376 } else if (i <
32) {
8377 t += f2(bl, cl, dl) + hl[
1]
8378 } else if (i <
48) {
8379 t += f3(bl, cl, dl) + hl[
2]
8380 } else if (i <
64) {
8381 t += f4(bl, cl, dl) + hl[
3]
8382 } else {// if (i
<80) {
8383 t += f5(bl, cl, dl) + hl[
4]
8394 t = (ar + M[offset + zr[i]]) |
0
8396 t += f5(br, cr, dr) + hr[
0]
8397 } else if (i <
32) {
8398 t += f4(br, cr, dr) + hr[
1]
8399 } else if (i <
48) {
8400 t += f3(br, cr, dr) + hr[
2]
8401 } else if (i <
64) {
8402 t += f2(br, cr, dr) + hr[
3]
8403 } else {// if (i
<80) {
8404 t += f1(br, cr, dr) + hr[
4]
8417 // intermediate hash value
8418 t = (H[
1] + cl + dr) |
0
8419 H[
1] = (H[
2] + dl + er) |
0
8420 H[
2] = (H[
3] + el + ar) |
0
8421 H[
3] = (H[
4] + al + br) |
0
8422 H[
4] = (H[
0] + bl + cr) |
0
8426 function f1 (x, y, z) {
8427 return ((x) ^ (y) ^ (z))
8430 function f2 (x, y, z) {
8431 return (((x) & (y)) | ((~x) & (z)))
8434 function f3 (x, y, z) {
8435 return (((x) | (~(y))) ^ (z))
8438 function f4 (x, y, z) {
8439 return (((x) & (z)) | ((y) & (~(z))))
8442 function f5 (x, y, z) {
8443 return ((x) ^ ((y) | (~(z))))
8446 function rotl (x, n) {
8447 return (x << n) | (x
>>> (
32 - n))
8450 function ripemd160 (message) {
8451 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8453 if (typeof message === 'string') {
8454 message = new Buffer(message, 'utf8')
8457 var m = bytesToWords(message)
8459 var nBitsLeft = message.length *
8
8460 var nBitsTotal = message.length *
8
8463 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8464 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8465 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8466 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8469 for (var i =
0; i < m.length; i +=
16) {
8470 processBlock(H, m, i)
8474 for (i =
0; i <
5; i++) {
8479 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8480 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8483 var digestbytes = wordsToBytes(H)
8484 return new Buffer(digestbytes)
8487 module.exports = ripemd160
8489 }).call(this,require(
"buffer").Buffer)
8490 },{
"buffer":
7}],
37:[function(require,module,exports){
8492 // prototype class for hash functions
8493 function Hash (blockSize, finalSize) {
8494 this._block = new Buffer(blockSize)
8495 this._finalSize = finalSize
8496 this._blockSize = blockSize
8501 Hash.prototype.update = function (data, enc) {
8502 if (typeof data === 'string') {
8504 data = new Buffer(data, enc)
8507 var l = this._len += data.length
8508 var s = this._s ||
0
8510 var buffer = this._block
8513 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8516 for (var i =
0; i < ch; i++) {
8517 buffer[(s % this._blockSize) + i] = data[i + f]
8523 if ((s % this._blockSize) ===
0) {
8524 this._update(buffer)
8532 Hash.prototype.digest = function (enc) {
8533 // Suppose the length of the message M, in bits, is l
8534 var l = this._len *
8
8536 // Append the bit
1 to the end of the message
8537 this._block[this._len % this._blockSize] =
0x80
8539 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8540 this._block.fill(
0, this._len % this._blockSize +
1)
8542 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8543 this._update(this._block)
8547 // to this append the block which is equal to the number l written in binary
8548 // TODO: handle case where l is
> Math.pow(
2,
29)
8549 this._block.writeInt32BE(l, this._blockSize -
4)
8551 var hash = this._update(this._block) || this._hash()
8553 return enc ? hash.toString(enc) : hash
8556 Hash.prototype._update = function () {
8557 throw new Error('_update must be implemented by subclass')
8560 module.exports = Hash
8562 }).call(this,require("buffer").Buffer)
8563 },{"buffer":
7}],
38:[function(require,module,exports){
8564 var exports = module.exports = function SHA (algorithm) {
8565 algorithm = algorithm.toLowerCase()
8567 var Algorithm = exports[algorithm]
8568 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8570 return new Algorithm()
8573 exports.sha = require('./sha')
8574 exports.sha1 = require('./sha1')
8575 exports.sha224 = require('./sha224')
8576 exports.sha256 = require('./sha256')
8577 exports.sha384 = require('./sha384')
8578 exports.sha512 = require('./sha512')
8580 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8585 * This source code is derived from sha1.js of the same repository.
8586 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8587 * operation was added.
8590 var inherits = require('inherits')
8591 var Hash = require('./hash')
8593 var W = new Array(
80)
8599 Hash.call(this,
64,
56)
8604 Sha.prototype.init = function () {
8605 this._a =
0x67452301 |
0
8606 this._b =
0xefcdab89 |
0
8607 this._c =
0x98badcfe |
0
8608 this._d =
0x10325476 |
0
8609 this._e =
0xc3d2e1f0 |
0
8615 * Bitwise rotate a
32-bit number to the left.
8617 function rol (num, cnt) {
8618 return (num << cnt) | (num
>>> (
32 - cnt))
8621 Sha.prototype._update = function (M) {
8633 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8634 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8636 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8637 function loop (w, f) {
8640 var t = rol(a,
5) + f + e + w + k
8651 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8652 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8654 while (j <
40) loop(calcW(), b ^ c ^ d)
8656 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8658 while (j <
80) loop(calcW(), b ^ c ^ d)
8660 this._a = (a + this._a) |
0
8661 this._b = (b + this._b) |
0
8662 this._c = (c + this._c) |
0
8663 this._d = (d + this._d) |
0
8664 this._e = (e + this._e) |
0
8667 Sha.prototype._hash = function () {
8668 var H = new Buffer(
20)
8670 H.writeInt32BE(this._a |
0,
0)
8671 H.writeInt32BE(this._b |
0,
4)
8672 H.writeInt32BE(this._c |
0,
8)
8673 H.writeInt32BE(this._d |
0,
12)
8674 H.writeInt32BE(this._e |
0,
16)
8679 module.exports = Sha
8682 }).call(this,require("buffer").Buffer)
8683 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8686 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8688 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8689 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8690 * Distributed under the BSD License
8691 * See http://pajhome.org.uk/crypt/md5 for details.
8694 var inherits = require('inherits')
8695 var Hash = require('./hash')
8697 var W = new Array(
80)
8703 Hash.call(this,
64,
56)
8706 inherits(Sha1, Hash)
8708 Sha1.prototype.init = function () {
8709 this._a =
0x67452301 |
0
8710 this._b =
0xefcdab89 |
0
8711 this._c =
0x98badcfe |
0
8712 this._d =
0x10325476 |
0
8713 this._e =
0xc3d2e1f0 |
0
8719 * Bitwise rotate a
32-bit number to the left.
8721 function rol (num, cnt) {
8722 return (num << cnt) | (num
>>> (
32 - cnt))
8725 Sha1.prototype._update = function (M) {
8736 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8737 function loop (w, f) {
8740 var t = rol(a,
5) + f + e + w + k
8751 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8752 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8754 while (j <
40) loop(calcW(), b ^ c ^ d)
8756 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8758 while (j <
80) loop(calcW(), b ^ c ^ d)
8760 this._a = (a + this._a) |
0
8761 this._b = (b + this._b) |
0
8762 this._c = (c + this._c) |
0
8763 this._d = (d + this._d) |
0
8764 this._e = (e + this._e) |
0
8767 Sha1.prototype._hash = function () {
8768 var H = new Buffer(
20)
8770 H.writeInt32BE(this._a |
0,
0)
8771 H.writeInt32BE(this._b |
0,
4)
8772 H.writeInt32BE(this._c |
0,
8)
8773 H.writeInt32BE(this._d |
0,
12)
8774 H.writeInt32BE(this._e |
0,
16)
8779 module.exports = Sha1
8781 }).call(this,require("buffer").Buffer)
8782 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8785 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8787 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8788 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8792 var inherits = require('inherits')
8793 var Sha256 = require('./sha256')
8794 var Hash = require('./hash')
8796 var W = new Array(
64)
8798 function Sha224 () {
8801 this._w = W // new Array(
64)
8803 Hash.call(this,
64,
56)
8806 inherits(Sha224, Sha256)
8808 Sha224.prototype.init = function () {
8809 this._a =
0xc1059ed8 |
0
8810 this._b =
0x367cd507 |
0
8811 this._c =
0x3070dd17 |
0
8812 this._d =
0xf70e5939 |
0
8813 this._e =
0xffc00b31 |
0
8814 this._f =
0x68581511 |
0
8815 this._g =
0x64f98fa7 |
0
8816 this._h =
0xbefa4fa4 |
0
8821 Sha224.prototype._hash = function () {
8822 var H = new Buffer(
28)
8824 H.writeInt32BE(this._a,
0)
8825 H.writeInt32BE(this._b,
4)
8826 H.writeInt32BE(this._c,
8)
8827 H.writeInt32BE(this._d,
12)
8828 H.writeInt32BE(this._e,
16)
8829 H.writeInt32BE(this._f,
20)
8830 H.writeInt32BE(this._g,
24)
8835 module.exports = Sha224
8837 }).call(this,require("buffer").Buffer)
8838 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8841 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8843 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8844 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8848 var inherits = require('inherits')
8849 var Hash = require('./hash')
8852 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8853 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8854 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8855 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8856 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8857 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8858 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8859 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8860 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8861 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8862 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8863 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8864 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8865 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8866 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8867 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8870 var W = new Array(
64)
8872 function Sha256 () {
8875 this._w = W // new Array(
64)
8877 Hash.call(this,
64,
56)
8880 inherits(Sha256, Hash)
8882 Sha256.prototype.init = function () {
8883 this._a =
0x6a09e667 |
0
8884 this._b =
0xbb67ae85 |
0
8885 this._c =
0x3c6ef372 |
0
8886 this._d =
0xa54ff53a |
0
8887 this._e =
0x510e527f |
0
8888 this._f =
0x9b05688c |
0
8889 this._g =
0x1f83d9ab |
0
8890 this._h =
0x5be0cd19 |
0
8896 return (X
>>> n) | (X << (
32 - n))
8903 function Ch (x, y, z) {
8904 return ((x & y) ^ ((~x) & z))
8907 function Maj (x, y, z) {
8908 return ((x & y) ^ (x & z) ^ (y & z))
8911 function Sigma0256 (x) {
8912 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8915 function Sigma1256 (x) {
8916 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8919 function Gamma0256 (x) {
8920 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8923 function Gamma1256 (x) {
8924 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8927 Sha256.prototype._update = function (M) {
8941 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8945 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8946 var T2 = Sigma0256(a) + Maj(a, b, c)
8960 while (j <
16) loop(M.readInt32BE(j *
4))
8961 while (j <
64) loop(calcW())
8963 this._a = (a + this._a) |
0
8964 this._b = (b + this._b) |
0
8965 this._c = (c + this._c) |
0
8966 this._d = (d + this._d) |
0
8967 this._e = (e + this._e) |
0
8968 this._f = (f + this._f) |
0
8969 this._g = (g + this._g) |
0
8970 this._h = (h + this._h) |
0
8973 Sha256.prototype._hash = function () {
8974 var H = new Buffer(
32)
8976 H.writeInt32BE(this._a,
0)
8977 H.writeInt32BE(this._b,
4)
8978 H.writeInt32BE(this._c,
8)
8979 H.writeInt32BE(this._d,
12)
8980 H.writeInt32BE(this._e,
16)
8981 H.writeInt32BE(this._f,
20)
8982 H.writeInt32BE(this._g,
24)
8983 H.writeInt32BE(this._h,
28)
8988 module.exports = Sha256
8990 }).call(this,require("buffer").Buffer)
8991 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8993 var inherits = require('inherits')
8994 var SHA512 = require('./sha512')
8995 var Hash = require('./hash')
8997 var W = new Array(
160)
8999 function Sha384 () {
9003 Hash.call(this,
128,
112)
9006 inherits(Sha384, SHA512)
9008 Sha384.prototype.init = function () {
9009 this._a =
0xcbbb9d5d |
0
9010 this._b =
0x629a292a |
0
9011 this._c =
0x9159015a |
0
9012 this._d =
0x152fecd8 |
0
9013 this._e =
0x67332667 |
0
9014 this._f =
0x8eb44a87 |
0
9015 this._g =
0xdb0c2e0d |
0
9016 this._h =
0x47b5481d |
0
9018 this._al =
0xc1059ed8 |
0
9019 this._bl =
0x367cd507 |
0
9020 this._cl =
0x3070dd17 |
0
9021 this._dl =
0xf70e5939 |
0
9022 this._el =
0xffc00b31 |
0
9023 this._fl =
0x68581511 |
0
9024 this._gl =
0x64f98fa7 |
0
9025 this._hl =
0xbefa4fa4 |
0
9030 Sha384.prototype._hash = function () {
9031 var H = new Buffer(
48)
9033 function writeInt64BE (h, l, offset) {
9034 H.writeInt32BE(h, offset)
9035 H.writeInt32BE(l, offset +
4)
9038 writeInt64BE(this._a, this._al,
0)
9039 writeInt64BE(this._b, this._bl,
8)
9040 writeInt64BE(this._c, this._cl,
16)
9041 writeInt64BE(this._d, this._dl,
24)
9042 writeInt64BE(this._e, this._el,
32)
9043 writeInt64BE(this._f, this._fl,
40)
9048 module.exports = Sha384
9050 }).call(this,require("buffer").Buffer)
9051 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
9053 var inherits = require('inherits')
9054 var Hash = require('./hash')
9057 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
9058 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
9059 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
9060 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
9061 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
9062 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
9063 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
9064 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
9065 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
9066 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
9067 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
9068 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
9069 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
9070 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
9071 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
9072 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
9073 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
9074 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
9075 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
9076 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
9077 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
9078 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
9079 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
9080 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
9081 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
9082 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
9083 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
9084 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
9085 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
9086 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9087 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9088 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9089 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9090 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9091 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9092 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9093 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9094 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9095 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9096 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9099 var W = new Array(
160)
9101 function Sha512 () {
9105 Hash.call(this,
128,
112)
9108 inherits(Sha512, Hash)
9110 Sha512.prototype.init = function () {
9111 this._a =
0x6a09e667 |
0
9112 this._b =
0xbb67ae85 |
0
9113 this._c =
0x3c6ef372 |
0
9114 this._d =
0xa54ff53a |
0
9115 this._e =
0x510e527f |
0
9116 this._f =
0x9b05688c |
0
9117 this._g =
0x1f83d9ab |
0
9118 this._h =
0x5be0cd19 |
0
9120 this._al =
0xf3bcc908 |
0
9121 this._bl =
0x84caa73b |
0
9122 this._cl =
0xfe94f82b |
0
9123 this._dl =
0x5f1d36f1 |
0
9124 this._el =
0xade682d1 |
0
9125 this._fl =
0x2b3e6c1f |
0
9126 this._gl =
0xfb41bd6b |
0
9127 this._hl =
0x137e2179 |
0
9132 function S (X, Xl, n) {
9133 return (X
>>> n) | (Xl << (
32 - n))
9136 function Ch (x, y, z) {
9137 return ((x & y) ^ ((~x) & z))
9140 function Maj (x, y, z) {
9141 return ((x & y) ^ (x & z) ^ (y & z))
9144 Sha512.prototype._update = function (M) {
9156 var al = this._al |
0
9157 var bl = this._bl |
0
9158 var cl = this._cl |
0
9159 var dl = this._dl |
0
9160 var el = this._el |
0
9161 var fl = this._fl |
0
9162 var gl = this._gl |
0
9163 var hl = this._hl |
0
9168 var x = W[j -
15 *
2]
9169 var xl = W[j -
15 *
2 +
1]
9170 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9171 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9174 xl = W[j -
2 *
2 +
1]
9175 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9176 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9178 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9179 var Wi7 = W[j -
7 *
2]
9180 var Wi7l = W[j -
7 *
2 +
1]
9182 var Wi16 = W[j -
16 *
2]
9183 var Wi16l = W[j -
16 *
2 +
1]
9185 Wil = gamma0l + Wi7l
9186 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9188 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9190 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9197 var maj = Maj(a, b, c)
9198 var majl = Maj(al, bl, cl)
9200 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9201 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9202 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9203 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9205 // t1 = h + sigma1 + ch + K[i] + W[i]
9209 var ch = Ch(e, f, g)
9210 var chl = Ch(el, fl, gl)
9212 var t1l = hl + sigma1l
9213 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9215 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9217 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9219 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9221 // t2 = sigma0 + maj
9222 var t2l = sigma0l + majl
9223 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9232 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9239 al = (t1l + t2l) |
0
9240 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9247 Wi = M.readInt32BE(j *
4)
9248 Wil = M.readInt32BE(j *
4 +
4)
9258 this._al = (this._al + al) |
0
9259 this._bl = (this._bl + bl) |
0
9260 this._cl = (this._cl + cl) |
0
9261 this._dl = (this._dl + dl) |
0
9262 this._el = (this._el + el) |
0
9263 this._fl = (this._fl + fl) |
0
9264 this._gl = (this._gl + gl) |
0
9265 this._hl = (this._hl + hl) |
0
9267 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9268 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9269 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9270 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9271 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9272 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9273 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9274 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9277 Sha512.prototype._hash = function () {
9278 var H = new Buffer(
64)
9280 function writeInt64BE (h, l, offset) {
9281 H.writeInt32BE(h, offset)
9282 H.writeInt32BE(l, offset +
4)
9285 writeInt64BE(this._a, this._al,
0)
9286 writeInt64BE(this._b, this._bl,
8)
9287 writeInt64BE(this._c, this._cl,
16)
9288 writeInt64BE(this._d, this._dl,
24)
9289 writeInt64BE(this._e, this._el,
32)
9290 writeInt64BE(this._f, this._fl,
40)
9291 writeInt64BE(this._g, this._gl,
48)
9292 writeInt64BE(this._h, this._hl,
56)
9297 module.exports = Sha512
9299 }).call(this,require(
"buffer").Buffer)
9300 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9303 var createHash = require('create-hash/browser');
9304 var inherits = require('inherits')
9306 var Transform = require('stream').Transform
9308 var ZEROS = new Buffer(
128)
9311 function Hmac(alg, key) {
9312 Transform.call(this)
9314 if (typeof key === 'string') {
9315 key = new Buffer(key)
9318 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9323 if (key.length
> blocksize) {
9324 key = createHash(alg).update(key).digest()
9326 } else if (key.length < blocksize) {
9327 key = Buffer.concat([key, ZEROS], blocksize)
9330 var ipad = this._ipad = new Buffer(blocksize)
9331 var opad = this._opad = new Buffer(blocksize)
9333 for (var i =
0; i < blocksize; i++) {
9334 ipad[i] = key[i] ^
0x36
9335 opad[i] = key[i] ^
0x5C
9338 this._hash = createHash(alg).update(ipad)
9341 inherits(Hmac, Transform)
9343 Hmac.prototype.update = function (data, enc) {
9344 this._hash.update(data, enc)
9349 Hmac.prototype._transform = function (data, _, next) {
9350 this._hash.update(data)
9355 Hmac.prototype._flush = function (next) {
9356 this.push(this.digest())
9361 Hmac.prototype.digest = function (enc) {
9362 var h = this._hash.digest()
9364 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9367 module.exports = function createHmac(alg, key) {
9368 return new Hmac(alg, key)
9371 }).call(this,require("buffer").Buffer)
9372 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9373 arguments[
4][
12][
0].apply(exports,arguments)
9374 },{"dup":
12}],
47:[function(require,module,exports){
9375 var assert = require('assert')
9376 var BigInteger = require('bigi')
9378 var Point = require('./point')
9380 function Curve(p, a, b, Gx, Gy, n, h) {
9384 this.G = Point.fromAffine(this, Gx, Gy)
9388 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9391 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9394 Curve.prototype.pointFromX = function(isOdd, x) {
9395 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9396 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9399 if (beta.isEven() ^ !isOdd) {
9400 y = this.p.subtract(y) // -y % p
9403 return Point.fromAffine(this, x, y)
9406 Curve.prototype.isInfinity = function(Q) {
9407 if (Q === this.infinity) return true
9409 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9412 Curve.prototype.isOnCurve = function(Q) {
9413 if (this.isInfinity(Q)) return true
9421 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9422 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9423 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9425 // and check that y^
2 = x^
3 + ax + b (mod p)
9426 var lhs = y.square().mod(p)
9427 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9428 return lhs.equals(rhs)
9432 * Validate an elliptic curve point.
9434 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9436 Curve.prototype.validate = function(Q) {
9438 assert(!this.isInfinity(Q), 'Point is at infinity')
9439 assert(this.isOnCurve(Q), 'Point is not on the curve')
9441 // Check nQ = O (where Q is a scalar multiple of G)
9442 var nQ = Q.multiply(this.n)
9443 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9448 module.exports = Curve
9450 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9453 "p": "fffffffdffffffffffffffffffffffff",
9454 "a": "fffffffdfffffffffffffffffffffffc",
9455 "b": "e87579c11079f43dd824993c2cee5ed3",
9456 "n": "fffffffe0000000075a30d1b9038a115",
9458 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9459 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9462 "p": "fffffffffffffffffffffffffffffffeffffac73",
9465 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9467 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9468 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9471 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9472 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9473 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9474 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9476 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9477 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9480 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9483 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9485 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9486 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9489 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9490 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9491 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9492 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9494 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9495 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9498 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9501 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9503 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9504 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9507 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9508 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9509 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9510 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9512 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9513 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9517 },{}],
49:[function(require,module,exports){
9518 var Point = require('./point')
9519 var Curve = require('./curve')
9521 var getCurveByName = require('./names')
9526 getCurveByName: getCurveByName
9529 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9530 var BigInteger = require('bigi')
9532 var curves = require('./curves')
9533 var Curve = require('./curve')
9535 function getCurveByName(name) {
9536 var curve = curves[name]
9537 if (!curve) return null
9539 var p = new BigInteger(curve.p,
16)
9540 var a = new BigInteger(curve.a,
16)
9541 var b = new BigInteger(curve.b,
16)
9542 var n = new BigInteger(curve.n,
16)
9543 var h = new BigInteger(curve.h,
16)
9544 var Gx = new BigInteger(curve.Gx,
16)
9545 var Gy = new BigInteger(curve.Gy,
16)
9547 return new Curve(p, a, b, Gx, Gy, n, h)
9550 module.exports = getCurveByName
9552 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9554 var assert = require('assert')
9555 var BigInteger = require('bigi')
9557 var THREE = BigInteger.valueOf(
3)
9559 function Point(curve, x, y, z) {
9560 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9568 this.compressed = true
9571 Object.defineProperty(Point.prototype, 'zInv', {
9573 if (this._zInv === null) {
9574 this._zInv = this.z.modInverse(this.curve.p)
9581 Object.defineProperty(Point.prototype, 'affineX', {
9583 return this.x.multiply(this.zInv).mod(this.curve.p)
9587 Object.defineProperty(Point.prototype, 'affineY', {
9589 return this.y.multiply(this.zInv).mod(this.curve.p)
9593 Point.fromAffine = function(curve, x, y) {
9594 return new Point(curve, x, y, BigInteger.ONE)
9597 Point.prototype.equals = function(other) {
9598 if (other === this) return true
9599 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9600 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9602 // u = Y2 * Z1 - Y1 * Z2
9603 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9605 if (u.signum() !==
0) return false
9607 // v = X2 * Z1 - X1 * Z2
9608 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9610 return v.signum() ===
0
9613 Point.prototype.negate = function() {
9614 var y = this.curve.p.subtract(this.y)
9616 return new Point(this.curve, this.x, y, this.z)
9619 Point.prototype.add = function(b) {
9620 if (this.curve.isInfinity(this)) return b
9621 if (this.curve.isInfinity(b)) return this
9628 // u = Y2 * Z1 - Y1 * Z2
9629 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9630 // v = X2 * Z1 - X1 * Z2
9631 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9633 if (v.signum() ===
0) {
9634 if (u.signum() ===
0) {
9635 return this.twice() // this == b, so double
9638 return this.curve.infinity // this = -b, so infinity
9642 var v3 = v2.multiply(v)
9643 var x1v2 = x1.multiply(v2)
9644 var zu2 = u.square().multiply(this.z)
9646 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9647 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9648 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9649 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)
9650 // z3 = v^
3 * z1 * z2
9651 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9653 return new Point(this.curve, x3, y3, z3)
9656 Point.prototype.twice = function() {
9657 if (this.curve.isInfinity(this)) return this
9658 if (this.y.signum() ===
0) return this.curve.infinity
9663 var y1z1 = y1.multiply(this.z)
9664 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9665 var a = this.curve.a
9667 // w =
3 * x1^
2 + a * z1^
2
9668 var w = x1.square().multiply(THREE)
9670 if (a.signum() !==
0) {
9671 w = w.add(this.z.square().multiply(a))
9674 w = w.mod(this.curve.p)
9675 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9676 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9677 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9678 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9679 // z3 =
8 * (y1 * z1)^
3
9680 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9682 return new Point(this.curve, x3, y3, z3)
9685 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9686 // TODO: modularize the multiplication algorithm
9687 Point.prototype.multiply = function(k) {
9688 if (this.curve.isInfinity(this)) return this
9689 if (k.signum() ===
0) return this.curve.infinity
9692 var h = e.multiply(THREE)
9694 var neg = this.negate()
9697 for (var i = h.bitLength() -
2; i
> 0; --i) {
9700 var hBit = h.testBit(i)
9701 var eBit = e.testBit(i)
9704 R = R.add(hBit ? this : neg)
9711 // Compute this*j + x*k (simultaneous multiplication)
9712 Point.prototype.multiplyTwo = function(j, x, k) {
9715 if (j.bitLength()
> k.bitLength())
9716 i = j.bitLength() -
1
9718 i = k.bitLength() -
1
9720 var R = this.curve.infinity
9721 var both = this.add(x)
9726 var jBit = j.testBit(i)
9727 var kBit = k.testBit(i)
9748 Point.prototype.getEncoded = function(compressed) {
9749 if (compressed == undefined) compressed = this.compressed
9750 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9752 var x = this.affineX
9753 var y = this.affineY
9757 // Determine size of q in bytes
9758 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9762 buffer = new Buffer(
1 + byteLength)
9763 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9767 buffer = new Buffer(
1 + byteLength + byteLength)
9768 buffer.writeUInt8(
0x04,
0)
9770 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9773 x.toBuffer(byteLength).copy(buffer,
1)
9778 Point.decodeFrom = function(curve, buffer) {
9779 var type = buffer.readUInt8(
0)
9780 var compressed = (type !==
4)
9782 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9783 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9787 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9788 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9790 var isOdd = (type ===
0x03)
9791 Q = curve.pointFromX(isOdd, x)
9794 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9796 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9797 Q = Point.fromAffine(curve, x, y)
9800 Q.compressed = compressed
9804 Point.prototype.toString = function () {
9805 if (this.curve.isInfinity(this)) return '(INFINITY)'
9807 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9810 module.exports = Point
9812 }).call(this,require("buffer").Buffer)
9813 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9814 (function (process,global,Buffer){
9817 var crypto = global.crypto || global.msCrypto
9818 if(crypto && crypto.getRandomValues) {
9819 module.exports = randomBytes;
9821 module.exports = oldBrowser;
9823 function randomBytes(size, cb) {
9824 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9825 /* This will not work in older browsers.
9826 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9829 crypto.getRandomValues(bytes);
9830 if (typeof cb === 'function') {
9831 return process.nextTick(function () {
9837 function oldBrowser() {
9839 'secure random number generation not supported by this browser\n'+
9840 'use chrome, FireFox or Internet Explorer
11'
9844 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9845 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9849 function getFunctionName(fn) {
9850 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9853 function getTypeTypeName(type) {
9854 if (nativeTypes.Function(type)) {
9855 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9857 if (nativeTypes.Object(type)) return JSON.stringify(type);
9862 function getValueTypeName(value) {
9863 if (nativeTypes.Null(value)) return '';
9865 return getFunctionName(value.constructor);
9868 function tfErrorString(type, value) {
9869 var typeTypeName = getTypeTypeName(type);
9870 var valueTypeName = getValueTypeName(value);
9872 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9875 function tfPropertyErrorString(type, name, value) {
9876 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9880 Array: (function (_Array) {
9881 function Array(_x) {
9882 return _Array.apply(this, arguments);
9885 Array.toString = function () {
9886 return _Array.toString();
9890 })(function (value) {
9891 return value !== null && value !== undefined && value.constructor === Array;
9893 Boolean: function Boolean(value) {
9894 return typeof value === 'boolean';
9896 Buffer: (function (_Buffer) {
9897 function Buffer(_x2) {
9898 return _Buffer.apply(this, arguments);
9901 Buffer.toString = function () {
9902 return _Buffer.toString();
9906 })(function (value) {
9907 return Buffer.isBuffer(value);
9909 Function: function Function(value) {
9910 return typeof value === 'function';
9912 Null: function Null(value) {
9913 return value === undefined || value === null;
9915 Number: function Number(value) {
9916 return typeof value === 'number';
9918 Object: function Object(value) {
9919 return typeof value === 'object';
9921 String: function String(value) {
9922 return typeof value === 'string';
9929 function tJSON(type) {
9930 return type && type.toJSON ? type.toJSON() : type;
9933 function sJSON(type) {
9934 var json = tJSON(type);
9935 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9939 arrayOf: function arrayOf(type) {
9940 function arrayOf(value, strict) {
9942 return nativeTypes.Array(value) && value.every(function (x) {
9943 return typeforce(type, x, strict);
9949 arrayOf.toJSON = function () {
9950 return [tJSON(type)];
9956 maybe: function maybe(type) {
9957 function maybe(value, strict) {
9958 return nativeTypes.Null(value) || typeforce(type, value, strict);
9960 maybe.toJSON = function () {
9961 return '?' + sJSON(type);
9967 object: function object(type) {
9968 function object(value, strict) {
9969 typeforce(nativeTypes.Object, value, strict);
9971 var propertyName, propertyType, propertyValue;
9974 for (propertyName in type) {
9975 propertyType = type[propertyName];
9976 propertyValue = value[propertyName];
9978 typeforce(propertyType, propertyValue, strict);
9981 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9985 for (propertyName in value) {
9986 if (type[propertyName]) continue;
9988 throw new TypeError('Unexpected property "' + propertyName + '"');
9994 object.toJSON = function () {
10001 oneOf: function oneOf() {
10002 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
10003 types[_key] = arguments[_key];
10006 function oneOf(value, strict) {
10007 return types.some(function (type) {
10009 return typeforce(type, value, strict);
10015 oneOf.toJSON = function () {
10016 return types.map(sJSON).join('|');
10022 quacksLike: function quacksLike(type) {
10023 function quacksLike(value, strict) {
10024 return type === getValueTypeName(value);
10026 quacksLike.toJSON = function () {
10033 tuple: function tuple() {
10034 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
10035 types[_key2] = arguments[_key2];
10038 function tuple(value, strict) {
10039 return types.every(function (type, i) {
10040 return typeforce(type, value[i], strict);
10043 tuple.toJSON = function () {
10044 return '(' + types.map(sJSON).join(', ') + ')';
10050 value: function value(expected) {
10051 function value(actual) {
10052 return actual === expected;
10054 value.toJSON = function () {
10062 function compile(type) {
10063 if (nativeTypes.String(type)) {
10064 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
10066 return nativeTypes[type] || otherTypes.quacksLike(type);
10067 } else if (type && nativeTypes.Object(type)) {
10068 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
10072 for (var propertyName in type) {
10073 compiled[propertyName] = compile(type[propertyName]);
10076 return otherTypes.object(compiled);
10077 } else if (nativeTypes.Function(type)) {
10081 return otherTypes.value(type);
10084 function typeforce(_x3, _x4, _x5) {
10087 _function: while (_again) {
10093 if (nativeTypes.Function(type)) {
10094 if (type(value, strict)) return true;
10096 throw new TypeError(tfErrorString(type, value));
10100 _x3 = compile(type);
10104 continue _function;
10108 // assign all types to typeforce function
10110 Object.keys(nativeTypes).forEach(function (typeName) {
10111 var nativeType = nativeTypes[typeName];
10112 nativeType.toJSON = function () {
10116 typeforce[typeName] = nativeType;
10119 for (typeName in otherTypes) {
10120 typeforce[typeName] = otherTypes[typeName];
10123 module.exports = typeforce;
10124 module.exports.compile = compile;
10125 }).call(this,require("buffer").Buffer)
10126 },{"buffer":
7}],
54:[function(require,module,exports){
10127 (function (Buffer){
10128 var assert = require('assert')
10129 var base58check = require('bs58check')
10130 var typeForce = require('typeforce')
10131 var networks = require('./networks')
10132 var scripts = require('./scripts')
10134 function findScriptTypeByVersion (version) {
10135 for (var networkName in networks) {
10136 var network = networks[networkName]
10138 if (version === network.pubKeyHash) return 'pubkeyhash'
10139 if (version === network.scriptHash) return 'scripthash'
10143 function Address (hash, version) {
10144 typeForce('Buffer', hash)
10146 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10147 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10150 this.version = version
10153 Address.fromBase58Check = function (string) {
10154 var payload = base58check.decode(string)
10155 var version = payload.readUInt8(
0)
10156 var hash = payload.slice(
1)
10158 return new Address(hash, version)
10161 Address.fromOutputScript = function (script, network) {
10162 network = network || networks.bitcoin
10164 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10165 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10167 assert(false, script.toASM() + ' has no matching Address')
10170 Address.prototype.toBase58Check = function () {
10171 var payload = new Buffer(
21)
10172 payload.writeUInt8(this.version,
0)
10173 this.hash.copy(payload,
1)
10175 return base58check.encode(payload)
10178 Address.prototype.toOutputScript = function () {
10179 var scriptType = findScriptTypeByVersion(this.version)
10181 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10182 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10184 assert(false, this.toString() + ' has no matching Script')
10187 Address.prototype.toString = Address.prototype.toBase58Check
10189 module.exports = Address
10191 }).call(this,require("buffer").Buffer)
10192 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10193 var bs58check = require('bs58check')
10195 function decode () {
10196 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10198 return bs58check.decode.apply(undefined, arguments)
10201 function encode () {
10202 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10204 return bs58check.encode.apply(undefined, arguments)
10212 },{"bs58check":
31}],
56:[function(require,module,exports){
10213 (function (Buffer){
10214 var assert = require('assert')
10215 var bufferutils = require('./bufferutils')
10216 var crypto = require('./crypto')
10218 var Transaction = require('./transaction')
10220 function Block () {
10222 this.prevHash = null
10223 this.merkleRoot = null
10229 Block.fromBuffer = function (buffer) {
10230 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10233 function readSlice (n) {
10235 return buffer.slice(offset - n, offset)
10238 function readUInt32 () {
10239 var i = buffer.readUInt32LE(offset)
10244 var block = new Block()
10245 block.version = readUInt32()
10246 block.prevHash = readSlice(
32)
10247 block.merkleRoot = readSlice(
32)
10248 block.timestamp = readUInt32()
10249 block.bits = readUInt32()
10250 block.nonce = readUInt32()
10252 if (buffer.length ===
80) return block
10254 function readVarInt () {
10255 var vi = bufferutils.readVarInt(buffer, offset)
10260 // FIXME: poor performance
10261 function readTransaction () {
10262 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10264 offset += tx.toBuffer().length
10268 var nTransactions = readVarInt()
10269 block.transactions = []
10271 for (var i =
0; i < nTransactions; ++i) {
10272 var tx = readTransaction()
10273 block.transactions.push(tx)
10279 Block.fromHex = function (hex) {
10280 return Block.fromBuffer(new Buffer(hex, 'hex'))
10283 Block.prototype.getHash = function () {
10284 return crypto.hash256(this.toBuffer(true))
10287 Block.prototype.getId = function () {
10288 return bufferutils.reverse(this.getHash()).toString('hex')
10291 Block.prototype.getUTCDate = function () {
10292 var date = new Date(
0) // epoch
10293 date.setUTCSeconds(this.timestamp)
10298 Block.prototype.toBuffer = function (headersOnly) {
10299 var buffer = new Buffer(
80)
10302 function writeSlice (slice) {
10303 slice.copy(buffer, offset)
10304 offset += slice.length
10307 function writeUInt32 (i) {
10308 buffer.writeUInt32LE(i, offset)
10312 writeUInt32(this.version)
10313 writeSlice(this.prevHash)
10314 writeSlice(this.merkleRoot)
10315 writeUInt32(this.timestamp)
10316 writeUInt32(this.bits)
10317 writeUInt32(this.nonce)
10319 if (headersOnly || !this.transactions) return buffer
10321 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10322 var txBuffers = this.transactions.map(function (tx) {
10323 return tx.toBuffer()
10326 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10329 Block.prototype.toHex = function (headersOnly) {
10330 return this.toBuffer(headersOnly).toString('hex')
10333 module.exports = Block
10335 }).call(this,require("buffer").Buffer)
10336 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10337 (function (Buffer){
10338 var assert = require('assert')
10339 var opcodes = require('./opcodes')
10341 // https://github.com/feross/buffer/blob/master/index.js#L1127
10342 function verifuint (value, max) {
10343 assert(typeof value === 'number', 'cannot write a non-number as a number')
10344 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10345 assert(value <= max, 'value is larger than maximum value for type')
10346 assert(Math.floor(value) === value, 'value has a fractional component')
10349 function pushDataSize (i) {
10350 return i < opcodes.OP_PUSHDATA1 ?
1
10356 function readPushDataInt (buffer, offset) {
10357 var opcode = buffer.readUInt8(offset)
10361 if (opcode < opcodes.OP_PUSHDATA1) {
10366 } else if (opcode === opcodes.OP_PUSHDATA1) {
10367 if (offset +
2 > buffer.length) return null
10368 number = buffer.readUInt8(offset +
1)
10372 } else if (opcode === opcodes.OP_PUSHDATA2) {
10373 if (offset +
3 > buffer.length) return null
10374 number = buffer.readUInt16LE(offset +
1)
10379 if (offset +
5 > buffer.length) return null
10380 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10382 number = buffer.readUInt32LE(offset +
1)
10393 function readUInt64LE (buffer, offset) {
10394 var a = buffer.readUInt32LE(offset)
10395 var b = buffer.readUInt32LE(offset +
4)
10398 verifuint(b + a,
0x001fffffffffffff)
10403 function readVarInt (buffer, offset) {
10404 var t = buffer.readUInt8(offset)
10413 } else if (t <
254) {
10414 number = buffer.readUInt16LE(offset +
1)
10418 } else if (t <
255) {
10419 number = buffer.readUInt32LE(offset +
1)
10424 number = readUInt64LE(buffer, offset +
1)
10434 function writePushDataInt (buffer, number, offset) {
10435 var size = pushDataSize(number)
10439 buffer.writeUInt8(number, offset)
10442 } else if (size ===
2) {
10443 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10444 buffer.writeUInt8(number, offset +
1)
10447 } else if (size ===
3) {
10448 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10449 buffer.writeUInt16LE(number, offset +
1)
10453 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10454 buffer.writeUInt32LE(number, offset +
1)
10460 function writeUInt64LE (buffer, value, offset) {
10461 verifuint(value,
0x001fffffffffffff)
10463 buffer.writeInt32LE(value & -
1, offset)
10464 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10467 function varIntSize (i) {
10470 : i <
0x100000000 ?
5
10474 function writeVarInt (buffer, number, offset) {
10475 var size = varIntSize(number)
10479 buffer.writeUInt8(number, offset)
10482 } else if (size ===
3) {
10483 buffer.writeUInt8(
253, offset)
10484 buffer.writeUInt16LE(number, offset +
1)
10487 } else if (size ===
5) {
10488 buffer.writeUInt8(
254, offset)
10489 buffer.writeUInt32LE(number, offset +
1)
10493 buffer.writeUInt8(
255, offset)
10494 writeUInt64LE(buffer, number, offset +
1)
10500 function varIntBuffer (i) {
10501 var size = varIntSize(i)
10502 var buffer = new Buffer(size)
10503 writeVarInt(buffer, i,
0)
10508 function reverse (buffer) {
10509 var buffer2 = new Buffer(buffer)
10510 Array.prototype.reverse.call(buffer2)
10515 pushDataSize: pushDataSize,
10516 readPushDataInt: readPushDataInt,
10517 readUInt64LE: readUInt64LE,
10518 readVarInt: readVarInt,
10520 varIntBuffer: varIntBuffer,
10521 varIntSize: varIntSize,
10522 writePushDataInt: writePushDataInt,
10523 writeUInt64LE: writeUInt64LE,
10524 writeVarInt: writeVarInt
10527 }).call(this,require("buffer").Buffer)
10528 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10529 var createHash = require('create-hash')
10531 function hash160 (buffer) {
10532 return ripemd160(sha256(buffer))
10535 function hash256 (buffer) {
10536 return sha256(sha256(buffer))
10539 function ripemd160 (buffer) {
10540 return createHash('rmd160').update(buffer).digest()
10543 function sha1 (buffer) {
10544 return createHash('sha1').update(buffer).digest()
10547 function sha256 (buffer) {
10548 return createHash('sha256').update(buffer).digest()
10551 // FIXME: Name not consistent with others
10552 var createHmac = require('create-hmac')
10554 function HmacSHA256 (buffer, secret) {
10555 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10556 return createHmac('sha256', secret).update(buffer).digest()
10559 function HmacSHA512 (buffer, secret) {
10560 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10561 return createHmac('sha512', secret).update(buffer).digest()
10565 ripemd160: ripemd160,
10570 HmacSHA256: HmacSHA256,
10571 HmacSHA512: HmacSHA512
10574 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10575 (function (Buffer){
10576 var assert = require('assert')
10577 var createHmac = require('create-hmac')
10578 var typeForce = require('typeforce')
10580 var BigInteger = require('bigi')
10581 var ECSignature = require('./ecsignature')
10583 var ZERO = new Buffer([
0])
10584 var ONE = new Buffer([
1])
10586 // https://tools.ietf.org/html/rfc6979#section-
3.2
10587 function deterministicGenerateK (curve, hash, d, checkSig) {
10588 typeForce('Buffer', hash)
10589 typeForce('BigInteger', d)
10591 // FIXME: remove/uncomment for
2.0.0
10592 // typeForce('Function', checkSig)
10594 if (typeof checkSig !== 'function') {
10595 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10597 checkSig = function (k) {
10600 var e = BigInteger.fromBuffer(hash)
10602 var Q = G.multiply(k)
10604 if (curve.isInfinity(Q))
10607 var r = Q.affineX.mod(n)
10608 if (r.signum() ===
0)
10611 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10612 if (s.signum() ===
0)
10620 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10622 var x = d.toBuffer(
32)
10623 var k = new Buffer(
32)
10624 var v = new Buffer(
32)
10626 // Step A, ignored as hash already provided
10634 k = createHmac('sha256', k)
10642 v = createHmac('sha256', k).update(v).digest()
10645 k = createHmac('sha256', k)
10653 v = createHmac('sha256', k).update(v).digest()
10655 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10657 v = createHmac('sha256', k).update(v).digest()
10659 var T = BigInteger.fromBuffer(v)
10661 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10662 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10663 k = createHmac('sha256', k)
10668 v = createHmac('sha256', k).update(v).digest()
10670 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10672 v = createHmac('sha256', k).update(v).digest()
10673 T = BigInteger.fromBuffer(v)
10679 function sign (curve, hash, d) {
10682 var e = BigInteger.fromBuffer(hash)
10686 deterministicGenerateK(curve, hash, d, function (k) {
10687 var Q = G.multiply(k)
10689 if (curve.isInfinity(Q))
10692 r = Q.affineX.mod(n)
10693 if (r.signum() ===
0)
10696 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10697 if (s.signum() ===
0)
10703 var N_OVER_TWO = n.shiftRight(
1)
10705 // enforce low S values, see bip62: 'low s values in signatures'
10706 if (s.compareTo(N_OVER_TWO)
> 0) {
10710 return new ECSignature(r, s)
10713 function verifyRaw (curve, e, signature, Q) {
10717 var r = signature.r
10718 var s = signature.s
10720 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10721 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10722 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10725 var c = s.modInverse(n)
10727 //
1.4.4 Compute u1 = es^−
1 mod n
10728 // u2 = rs^−
1 mod n
10729 var u1 = e.multiply(c).mod(n)
10730 var u2 = r.multiply(c).mod(n)
10732 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10733 var R = G.multiplyTwo(u1, Q, u2)
10734 var v = R.affineX.mod(n)
10736 //
1.4.5 (cont.) Enforce R is not at infinity
10737 if (curve.isInfinity(R)) return false
10739 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10743 function verify (curve, hash, signature, Q) {
10744 //
1.4.2 H = Hash(M), already done by the user
10746 var e = BigInteger.fromBuffer(hash)
10748 return verifyRaw(curve, e, signature, Q)
10752 * Recover a public key from a signature.
10754 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10755 * Key Recovery Operation".
10757 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10759 function recoverPubKey (curve, e, signature, i) {
10760 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10765 var r = signature.r
10766 var s = signature.s
10768 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10769 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10771 // A set LSB signifies that the y-coordinate is odd
10774 // The more significant bit specifies whether we should use the
10775 // first or second candidate key.
10776 var isSecondKey = i
>> 1
10778 //
1.1 Let x = r + jn
10779 var x = isSecondKey ? r.add(n) : r
10780 var R = curve.pointFromX(isYOdd, x)
10782 //
1.4 Check that nR is at infinity
10783 var nR = R.multiply(n)
10784 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10786 // Compute -e from e
10787 var eNeg = e.negate().mod(n)
10789 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10790 // Q = r^-
1 (sR + -eG)
10791 var rInv = r.modInverse(n)
10793 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10800 * Calculate pubkey extraction parameter.
10802 * When extracting a pubkey from a signature, we have to
10803 * distinguish four different cases. Rather than putting this
10804 * burden on the verifier, Bitcoin includes a
2-bit value with the
10807 * This function simply tries all four cases and returns the value
10808 * that resulted in a successful pubkey recovery.
10810 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10811 for (var i =
0; i <
4; i++) {
10812 var Qprime = recoverPubKey(curve, e, signature, i)
10815 if (Qprime.equals(Q)) {
10820 throw new Error('Unable to find valid recovery factor')
10824 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10825 deterministicGenerateK: deterministicGenerateK,
10826 recoverPubKey: recoverPubKey,
10829 verifyRaw: verifyRaw
10832 }).call(this,require(
"buffer").Buffer)
10833 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10834 (function (Buffer){
10835 var assert = require('assert')
10836 var base58check = require('bs58check')
10837 var ecdsa = require('./ecdsa')
10838 var networks = require('./networks')
10839 var randomBytes = require('randombytes')
10840 var typeForce = require('typeforce')
10842 var BigInteger = require('bigi')
10843 var ECPubKey = require('./ecpubkey')
10845 var ecurve = require('ecurve')
10846 var secp256k1 = ecurve.getCurveByName('secp256k1')
10848 function ECKey (d, compressed) {
10849 assert(d.signum()
> 0, 'Private key must be greater than
0')
10850 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10852 var Q = ECKey.curve.G.multiply(d)
10855 this.pub = new ECPubKey(Q, compressed)
10859 ECKey.curve = secp256k1
10861 // Static constructors
10862 ECKey.fromWIF = function (string) {
10863 var payload = base58check.decode(string)
10864 var compressed = false
10866 // Ignore the version byte
10867 payload = payload.slice(
1)
10869 if (payload.length ===
33) {
10870 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10872 // Truncate the compression flag
10873 payload = payload.slice(
0, -
1)
10877 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10879 var d = BigInteger.fromBuffer(payload)
10880 return new ECKey(d, compressed)
10883 ECKey.makeRandom = function (compressed, rng) {
10884 rng = rng || randomBytes
10886 var buffer = rng(
32)
10887 typeForce('Buffer', buffer)
10888 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10890 var d = BigInteger.fromBuffer(buffer)
10891 d = d.mod(ECKey.curve.n)
10893 return new ECKey(d, compressed)
10896 // Export functions
10897 ECKey.prototype.toWIF = function (network) {
10898 network = network || networks.bitcoin
10900 var bufferLen = this.pub.compressed ?
34 :
33
10901 var buffer = new Buffer(bufferLen)
10903 buffer.writeUInt8(network.wif,
0)
10904 this.d.toBuffer(
32).copy(buffer,
1)
10906 if (this.pub.compressed) {
10907 buffer.writeUInt8(
0x01,
33)
10910 return base58check.encode(buffer)
10914 ECKey.prototype.sign = function (hash) {
10915 return ecdsa.sign(ECKey.curve, hash, this.d)
10918 module.exports = ECKey
10920 }).call(this,require(
"buffer").Buffer)
10921 },{
"./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){
10922 (function (Buffer){
10923 var crypto = require('./crypto')
10924 var ecdsa = require('./ecdsa')
10925 var typeForce = require('typeforce')
10926 var networks = require('./networks')
10928 var Address = require('./address')
10930 var ecurve = require('ecurve')
10931 var secp256k1 = ecurve.getCurveByName('secp256k1')
10933 function ECPubKey (Q, compressed) {
10934 if (compressed === undefined) {
10938 typeForce('Point', Q)
10939 typeForce('Boolean', compressed)
10941 this.compressed = compressed
10946 ECPubKey.curve = secp256k1
10948 // Static constructors
10949 ECPubKey.fromBuffer = function (buffer) {
10950 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10951 return new ECPubKey(Q, Q.compressed)
10954 ECPubKey.fromHex = function (hex) {
10955 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10959 ECPubKey.prototype.getAddress = function (network) {
10960 network = network || networks.bitcoin
10962 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10965 ECPubKey.prototype.verify = function (hash, signature) {
10966 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10969 // Export functions
10970 ECPubKey.prototype.toBuffer = function () {
10971 return this.Q.getEncoded(this.compressed)
10974 ECPubKey.prototype.toHex = function () {
10975 return this.toBuffer().toString('hex')
10978 module.exports = ECPubKey
10980 }).call(this,require(
"buffer").Buffer)
10981 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10982 (function (Buffer){
10983 var assert = require('assert')
10984 var typeForce = require('typeforce')
10986 var BigInteger = require('bigi')
10988 function ECSignature (r, s) {
10989 typeForce('BigInteger', r)
10990 typeForce('BigInteger', s)
10996 ECSignature.parseCompact = function (buffer) {
10997 assert.equal(buffer.length,
65, 'Invalid signature length')
10998 var i = buffer.readUInt8(
0) -
27
11001 assert.equal(i, i &
7, 'Invalid signature parameter')
11002 var compressed = !!(i &
4)
11004 // Recovery param only
11007 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
11008 var s = BigInteger.fromBuffer(buffer.slice(
33))
11011 compressed: compressed,
11013 signature: new ECSignature(r, s)
11017 ECSignature.fromDER = function (buffer) {
11018 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
11019 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
11020 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
11022 var rLen = buffer.readUInt8(
3)
11023 assert(rLen
> 0, 'R length is zero')
11025 var offset =
4 + rLen
11026 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
11028 var sLen = buffer.readUInt8(offset +
1)
11029 assert(sLen
> 0, 'S length is zero')
11031 var rB = buffer.slice(
4, offset)
11032 var sB = buffer.slice(offset +
2)
11035 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
11036 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
11039 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
11040 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
11043 assert.equal(offset, buffer.length, 'Invalid DER encoding')
11044 var r = BigInteger.fromDERInteger(rB)
11045 var s = BigInteger.fromDERInteger(sB)
11047 assert(r.signum()
>=
0, 'R value is negative')
11048 assert(s.signum()
>=
0, 'S value is negative')
11050 return new ECSignature(r, s)
11053 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
11054 ECSignature.parseScriptSignature = function (buffer) {
11055 var hashType = buffer.readUInt8(buffer.length -
1)
11056 var hashTypeMod = hashType & ~
0x80
11058 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11061 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
11066 ECSignature.prototype.toCompact = function (i, compressed) {
11073 var buffer = new Buffer(
65)
11074 buffer.writeUInt8(i,
0)
11076 this.r.toBuffer(
32).copy(buffer,
1)
11077 this.s.toBuffer(
32).copy(buffer,
33)
11082 ECSignature.prototype.toDER = function () {
11083 var rBa = this.r.toDERInteger()
11084 var sBa = this.s.toDERInteger()
11089 sequence.push(
0x02, rBa.length)
11090 sequence = sequence.concat(rBa)
11093 sequence.push(
0x02, sBa.length)
11094 sequence = sequence.concat(sBa)
11097 sequence.unshift(
0x30, sequence.length)
11099 return new Buffer(sequence)
11102 ECSignature.prototype.toScriptSignature = function (hashType) {
11103 var hashTypeMod = hashType & ~
0x80
11104 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11106 var hashTypeBuffer = new Buffer(
1)
11107 hashTypeBuffer.writeUInt8(hashType,
0)
11109 return Buffer.concat([this.toDER(), hashTypeBuffer])
11112 module.exports = ECSignature
11114 }).call(this,require(
"buffer").Buffer)
11115 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11116 (function (Buffer){
11117 var assert = require('assert')
11118 var base58check = require('bs58check')
11119 var bcrypto = require('./crypto')
11120 var createHmac = require('create-hmac')
11121 var typeForce = require('typeforce')
11122 var networks = require('./networks')
11124 var BigInteger = require('bigi')
11125 var ECKey = require('./eckey')
11126 var ECPubKey = require('./ecpubkey')
11128 var ecurve = require('ecurve')
11129 var curve = ecurve.getCurveByName('secp256k1')
11131 function findBIP32NetworkByVersion (version) {
11132 for (var name in networks) {
11133 var network = networks[name]
11135 if (version === network.bip32.private || version === network.bip32.public) {
11140 assert(false, 'Could not find network for ' + version.toString(
16))
11143 function HDNode (K, chainCode, network) {
11144 network = network || networks.bitcoin
11146 typeForce('Buffer', chainCode)
11148 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11149 assert(network.bip32, 'Unknown BIP32 constants for network')
11151 this.chainCode = chainCode
11154 this.parentFingerprint =
0x00000000
11155 this.network = network
11157 if (K instanceof BigInteger) {
11158 this.privKey = new ECKey(K, true)
11159 this.pubKey = this.privKey.pub
11160 } else if (K instanceof ECKey) {
11161 assert(K.pub.compressed, 'ECKey must be compressed')
11163 this.pubKey = K.pub
11164 } else if (K instanceof ECPubKey) {
11165 assert(K.compressed, 'ECPubKey must be compressed')
11168 this.pubKey = new ECPubKey(K, true)
11172 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11173 HDNode.HIGHEST_BIT =
0x80000000
11176 HDNode.fromSeedBuffer = function (seed, network) {
11177 typeForce('Buffer', seed)
11179 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11180 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11182 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11183 var IL = I.slice(
0,
32)
11184 var IR = I.slice(
32)
11186 // In case IL is
0 or
>= n, the master key is invalid
11187 // This is handled by `new ECKey` in the HDNode constructor
11188 var pIL = BigInteger.fromBuffer(IL)
11190 return new HDNode(pIL, IR, network)
11193 HDNode.fromSeedHex = function (hex, network) {
11194 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11197 HDNode.fromBase58 = function (string, network) {
11198 return HDNode.fromBuffer(base58check.decode(string), network, true)
11201 // FIXME: remove in
2.x.y
11202 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11203 if (!__ignoreDeprecation) {
11204 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11207 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11209 //
4 byte: version bytes
11210 var version = buffer.readUInt32BE(
0)
11213 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11217 network = findBIP32NetworkByVersion(version)
11220 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11221 var depth = buffer.readUInt8(
4)
11223 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11224 var parentFingerprint = buffer.readUInt32BE(
5)
11226 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11229 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11230 // This is encoded in MSB order. (
0x00000000 if master key)
11231 var index = buffer.readUInt32BE(
9)
11232 assert(depth
> 0 || index ===
0, 'Invalid index')
11234 //
32 bytes: the chain code
11235 var chainCode = buffer.slice(
13,
45)
11238 //
33 bytes: private key data (
0x00 + k)
11239 if (version === network.bip32.private) {
11240 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11241 data = buffer.slice(
46,
78)
11242 var d = BigInteger.fromBuffer(data)
11243 hd = new HDNode(d, chainCode, network)
11245 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11247 data = buffer.slice(
45,
78)
11248 var Q = ecurve.Point.decodeFrom(curve, data)
11249 assert.equal(Q.compressed, true, 'Invalid public key')
11251 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11252 // If not, the extended public key is invalid.
11255 hd = new HDNode(Q, chainCode, network)
11260 hd.parentFingerprint = parentFingerprint
11265 // FIXME: remove in
2.x.y
11266 HDNode.fromHex = function (hex, network) {
11267 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11270 HDNode.prototype.getIdentifier = function () {
11271 return bcrypto.hash160(this.pubKey.toBuffer())
11274 HDNode.prototype.getFingerprint = function () {
11275 return this.getIdentifier().slice(
0,
4)
11278 HDNode.prototype.getAddress = function () {
11279 return this.pubKey.getAddress(this.network)
11282 HDNode.prototype.neutered = function () {
11283 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11284 neutered.depth = this.depth
11285 neutered.index = this.index
11286 neutered.parentFingerprint = this.parentFingerprint
11291 HDNode.prototype.toBase58 = function (isPrivate) {
11292 return base58check.encode(this.toBuffer(isPrivate, true))
11295 // FIXME: remove in
2.x.y
11296 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11297 if (isPrivate === undefined) {
11298 isPrivate = !!this.privKey
11300 // FIXME: remove in
2.x.y
11302 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11305 if (!__ignoreDeprecation) {
11306 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11310 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11311 var buffer = new Buffer(HDNode.LENGTH)
11313 //
4 bytes: version bytes
11314 buffer.writeUInt32BE(version,
0)
11317 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11318 buffer.writeUInt8(this.depth,
4)
11320 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11321 buffer.writeUInt32BE(this.parentFingerprint,
5)
11323 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11324 // This is encoded in Big endian. (
0x00000000 if master key)
11325 buffer.writeUInt32BE(this.index,
9)
11327 //
32 bytes: the chain code
11328 this.chainCode.copy(buffer,
13)
11330 //
33 bytes: the public key or private key data
11332 // FIXME: remove in
2.x.y
11333 assert(this.privKey, 'Missing private key')
11335 //
0x00 + k for private keys
11336 buffer.writeUInt8(
0,
45)
11337 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11339 // X9.62 encoding for public keys
11340 this.pubKey.toBuffer().copy(buffer,
45)
11346 // FIXME: remove in
2.x.y
11347 HDNode.prototype.toHex = function (isPrivate) {
11348 return this.toBuffer(isPrivate).toString('hex')
11351 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11352 HDNode.prototype.derive = function (index) {
11353 var isHardened = index
>= HDNode.HIGHEST_BIT
11354 var indexBuffer = new Buffer(
4)
11355 indexBuffer.writeUInt32BE(index,
0)
11361 assert(this.privKey, 'Could not derive hardened child key')
11363 // data =
0x00 || ser256(kpar) || ser32(index)
11364 data = Buffer.concat([
11365 this.privKey.d.toBuffer(
33),
11371 // data = serP(point(kpar)) || ser32(index)
11372 // = serP(Kpar) || ser32(index)
11373 data = Buffer.concat([
11374 this.pubKey.toBuffer(),
11379 var I = createHmac('sha512', this.chainCode).update(data).digest()
11380 var IL = I.slice(
0,
32)
11381 var IR = I.slice(
32)
11383 var pIL = BigInteger.fromBuffer(IL)
11385 // In case parse256(IL)
>= n, proceed with the next value for i
11386 if (pIL.compareTo(curve.n)
>=
0) {
11387 return this.derive(index +
1)
11390 // Private parent key -
> private child key
11392 if (this.privKey) {
11393 // ki = parse256(IL) + kpar (mod n)
11394 var ki = pIL.add(this.privKey.d).mod(curve.n)
11396 // In case ki ==
0, proceed with the next value for i
11397 if (ki.signum() ===
0) {
11398 return this.derive(index +
1)
11401 hd = new HDNode(ki, IR, this.network)
11403 // Public parent key -
> public child key
11405 // Ki = point(parse256(IL)) + Kpar
11407 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11409 // In case Ki is the point at infinity, proceed with the next value for i
11410 if (curve.isInfinity(Ki)) {
11411 return this.derive(index +
1)
11414 hd = new HDNode(Ki, IR, this.network)
11417 hd.depth = this.depth +
1
11419 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11424 HDNode.prototype.deriveHardened = function (index) {
11425 // Only derives hardened private keys by default
11426 return this.derive(index + HDNode.HIGHEST_BIT)
11429 HDNode.prototype.toString = HDNode.prototype.toBase58
11431 module.exports = HDNode
11433 }).call(this,require("buffer").Buffer)
11434 },{"./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){
11436 Address: require('./address'),
11437 base58check: require('./base58check'),
11438 Block: require('./block'),
11439 bufferutils: require('./bufferutils'),
11440 crypto: require('./crypto'),
11441 ecdsa: require('./ecdsa'),
11442 ECKey: require('./eckey'),
11443 ECPubKey: require('./ecpubkey'),
11444 ECSignature: require('./ecsignature'),
11445 Message: require('./message'),
11446 opcodes: require('./opcodes'),
11447 HDNode: require('./hdnode'),
11448 Script: require('./script'),
11449 scripts: require('./scripts'),
11450 Transaction: require('./transaction'),
11451 TransactionBuilder: require('./transaction_builder'),
11452 networks: require('./networks'),
11453 Wallet: require('./wallet')
11456 },{"./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){
11457 (function (Buffer){
11458 var bufferutils = require('./bufferutils')
11459 var crypto = require('./crypto')
11460 var ecdsa = require('./ecdsa')
11461 var networks = require('./networks')
11463 var BigInteger = require('bigi')
11464 var ECPubKey = require('./ecpubkey')
11465 var ECSignature = require('./ecsignature')
11467 var ecurve = require('ecurve')
11468 var ecparams = ecurve.getCurveByName('secp256k1')
11470 function magicHash (message, network) {
11471 var magicPrefix = new Buffer(network.magicPrefix)
11472 var messageBuffer = new Buffer(message)
11473 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11475 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11476 return crypto.hash256(buffer)
11479 function sign (privKey, message, network) {
11480 network = network || networks.bitcoin
11482 var hash = magicHash(message, network)
11483 var signature = privKey.sign(hash)
11484 var e = BigInteger.fromBuffer(hash)
11485 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11487 return signature.toCompact(i, privKey.pub.compressed)
11490 // TODO: network could be implied from address
11491 function verify (address, signature, message, network) {
11492 if (!Buffer.isBuffer(signature)) {
11493 signature = new Buffer(signature, 'base64')
11496 network = network || networks.bitcoin
11498 var hash = magicHash(message, network)
11499 var parsed = ECSignature.parseCompact(signature)
11500 var e = BigInteger.fromBuffer(hash)
11501 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11503 var pubKey = new ECPubKey(Q, parsed.compressed)
11504 return pubKey.getAddress(network).toString() === address.toString()
11508 magicHash: magicHash,
11513 }).call(this,require("buffer").Buffer)
11514 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11515 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11516 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11520 magicPrefix: '\x18Bitcoin Signed Message:\n',
11522 public:
0x0488b21e,
11523 private:
0x0488ade4
11528 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11529 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11530 estimateFee: estimateFee('bitcoin')
11533 magicPrefix: '\x18Bitcoin Signed Message:\n',
11535 public:
0x043587cf,
11536 private:
0x04358394
11541 dustThreshold:
546,
11543 estimateFee: estimateFee('testnet')
11546 magicPrefix: '\x19Litecoin Signed Message:\n',
11548 public:
0x019da462,
11549 private:
0x019d9cfe
11554 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11555 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11556 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11557 estimateFee: estimateFee('litecoin')
11560 magicPrefix: '\x19Dogecoin Signed Message:\n',
11562 public:
0x02facafd,
11563 private:
0x02fac398
11568 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11569 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11570 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11571 estimateFee: estimateFee('dogecoin')
11574 magicPrefix: '\x18Viacoin Signed Message:\n',
11576 public:
0x0488b21e,
11577 private:
0x0488ade4
11582 dustThreshold:
560,
11583 dustSoftThreshold:
100000,
11584 feePerKb:
100000, //
11585 estimateFee: estimateFee('viacoin')
11588 magicPrefix: '\x18Viacoin Signed Message:\n',
11590 public:
0x043587cf,
11591 private:
0x04358394
11596 dustThreshold:
560,
11597 dustSoftThreshold:
100000,
11599 estimateFee: estimateFee('viacointestnet')
11602 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11604 public:
0x019da462,
11605 private:
0x019d9cfe
11610 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11611 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11612 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11613 estimateFee: estimateFee('gamerscoin')
11616 magicPrefix: '\x19Jumbucks Signed Message:\n',
11618 public:
0x037a689a,
11619 private:
0x037a6460
11625 dustSoftThreshold:
10000,
11627 estimateFee: estimateFee('jumbucks')
11630 magicPrefix: '\x18Zetacoin Signed Message:\n',
11632 public:
0x0488b21e,
11633 private:
0x0488ade4
11638 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11639 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11640 estimateFee: estimateFee('zetacoin')
11644 function estimateFee (type) {
11645 return function (tx) {
11646 var network = networks[type]
11647 var baseFee = network.feePerKb
11648 var byteSize = tx.toBuffer().length
11650 var fee = baseFee * Math.ceil(byteSize /
1000)
11651 if (network.dustSoftThreshold === undefined) return fee
11653 tx.outs.forEach(function (e) {
11654 if (e.value < network.dustSoftThreshold) {
11663 module.exports = networks
11665 },{}],
67:[function(require,module,exports){
11706 OP_TOALTSTACK:
107,
11707 OP_FROMALTSTACK:
108,
11739 OP_EQUALVERIFY:
136,
11764 OP_NUMEQUALVERIFY:
157,
11765 OP_NUMNOTEQUAL:
158,
11767 OP_GREATERTHAN:
160,
11768 OP_LESSTHANOREQUAL:
161,
11769 OP_GREATERTHANOREQUAL:
162,
11781 OP_CODESEPARATOR:
171,
11783 OP_CHECKSIGVERIFY:
173,
11784 OP_CHECKMULTISIG:
174,
11785 OP_CHECKMULTISIGVERIFY:
175,
11799 // template matching params
11800 OP_PUBKEYHASH:
253,
11802 OP_INVALIDOPCODE:
255
11805 },{}],
68:[function(require,module,exports){
11806 (function (Buffer){
11807 var assert = require('assert')
11808 var bufferutils = require('./bufferutils')
11809 var crypto = require('./crypto')
11810 var typeForce = require('typeforce')
11811 var opcodes = require('./opcodes')
11813 function Script (buffer, chunks) {
11814 typeForce('Buffer', buffer)
11815 typeForce('Array', chunks)
11817 this.buffer = buffer
11818 this.chunks = chunks
11821 Script.fromASM = function (asm) {
11822 var strChunks = asm.split(' ')
11823 var chunks = strChunks.map(function (strChunk) {
11825 if (strChunk in opcodes) {
11826 return opcodes[strChunk]
11830 return new Buffer(strChunk, 'hex')
11834 return Script.fromChunks(chunks)
11837 Script.fromBuffer = function (buffer) {
11841 while (i < buffer.length) {
11842 var opcode = buffer.readUInt8(i)
11845 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11846 var d = bufferutils.readPushDataInt(buffer, i)
11848 // did reading a pushDataInt fail? return non-chunked script
11849 if (d === null) return new Script(buffer, [])
11852 // attempt to read too much data?
11853 if (i + d.number
> buffer.length) return new Script(buffer, [])
11855 var data = buffer.slice(i, i + d.number)
11862 chunks.push(opcode)
11868 return new Script(buffer, chunks)
11871 Script.fromChunks = function (chunks) {
11872 typeForce('Array', chunks)
11874 var bufferSize = chunks.reduce(function (accum, chunk) {
11876 if (Buffer.isBuffer(chunk)) {
11877 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11884 var buffer = new Buffer(bufferSize)
11887 chunks.forEach(function (chunk) {
11889 if (Buffer.isBuffer(chunk)) {
11890 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11892 chunk.copy(buffer, offset)
11893 offset += chunk.length
11897 buffer.writeUInt8(chunk, offset)
11902 assert.equal(offset, buffer.length, 'Could not decode chunks')
11903 return new Script(buffer, chunks)
11906 Script.fromHex = function (hex) {
11907 return Script.fromBuffer(new Buffer(hex, 'hex'))
11910 Script.EMPTY = Script.fromChunks([])
11912 Script.prototype.getHash = function () {
11913 return crypto.hash160(this.buffer)
11916 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11917 Script.prototype.without = function (needle) {
11918 return Script.fromChunks(this.chunks.filter(function (op) {
11919 return op !== needle
11923 var reverseOps = []
11924 for (var op in opcodes) {
11925 var code = opcodes[op]
11926 reverseOps[code] = op
11929 Script.prototype.toASM = function () {
11930 return this.chunks.map(function (chunk) {
11932 if (Buffer.isBuffer(chunk)) {
11933 return chunk.toString('hex')
11937 return reverseOps[chunk]
11942 Script.prototype.toBuffer = function () {
11946 Script.prototype.toHex = function () {
11947 return this.toBuffer().toString('hex')
11950 module.exports = Script
11952 }).call(this,require("buffer").Buffer)
11953 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11954 (function (Buffer){
11955 var assert = require('assert')
11956 var ops = require('./opcodes')
11957 var typeForce = require('typeforce')
11959 var ecurve = require('ecurve')
11960 var curve = ecurve.getCurveByName('secp256k1')
11962 var ECSignature = require('./ecsignature')
11963 var Script = require('./script')
11965 function isCanonicalPubKey (buffer) {
11966 if (!Buffer.isBuffer(buffer)) return false
11969 ecurve.Point.decodeFrom(curve, buffer)
11971 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11980 function isCanonicalSignature (buffer) {
11981 if (!Buffer.isBuffer(buffer)) return false
11984 ECSignature.parseScriptSignature(buffer)
11986 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/))) {
11996 function isPubKeyHashInput (script) {
11997 return script.chunks.length ===
2 &&
11998 isCanonicalSignature(script.chunks[
0]) &&
11999 isCanonicalPubKey(script.chunks[
1])
12002 function isPubKeyHashOutput (script) {
12003 return script.chunks.length ===
5 &&
12004 script.chunks[
0] === ops.OP_DUP &&
12005 script.chunks[
1] === ops.OP_HASH160 &&
12006 Buffer.isBuffer(script.chunks[
2]) &&
12007 script.chunks[
2].length ===
20 &&
12008 script.chunks[
3] === ops.OP_EQUALVERIFY &&
12009 script.chunks[
4] === ops.OP_CHECKSIG
12012 function isPubKeyInput (script) {
12013 return script.chunks.length ===
1 &&
12014 isCanonicalSignature(script.chunks[
0])
12017 function isPubKeyOutput (script) {
12018 return script.chunks.length ===
2 &&
12019 isCanonicalPubKey(script.chunks[
0]) &&
12020 script.chunks[
1] === ops.OP_CHECKSIG
12023 function isScriptHashInput (script, allowIncomplete) {
12024 if (script.chunks.length <
2) return false
12026 var lastChunk = script.chunks[script.chunks.length -
1]
12027 if (!Buffer.isBuffer(lastChunk)) return false
12029 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
12030 var redeemScript = Script.fromBuffer(lastChunk)
12032 // is redeemScript a valid script?
12033 if (redeemScript.chunks.length ===
0) return false
12035 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
12038 function isScriptHashOutput (script) {
12039 return script.chunks.length ===
3 &&
12040 script.chunks[
0] === ops.OP_HASH160 &&
12041 Buffer.isBuffer(script.chunks[
1]) &&
12042 script.chunks[
1].length ===
20 &&
12043 script.chunks[
2] === ops.OP_EQUAL
12046 // allowIncomplete is to account for combining signatures
12047 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
12048 function isMultisigInput (script, allowIncomplete) {
12049 if (script.chunks.length <
2) return false
12050 if (script.chunks[
0] !== ops.OP_0) return false
12052 if (allowIncomplete) {
12053 return script.chunks.slice(
1).every(function (chunk) {
12054 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12058 return script.chunks.slice(
1).every(isCanonicalSignature)
12061 function isMultisigOutput (script) {
12062 if (script.chunks.length <
4) return false
12063 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
12065 var mOp = script.chunks[
0]
12066 if (mOp === ops.OP_0) return false
12067 if (mOp < ops.OP_1) return false
12068 if (mOp
> ops.OP_16) return false
12070 var nOp = script.chunks[script.chunks.length -
2]
12071 if (nOp === ops.OP_0) return false
12072 if (nOp < ops.OP_1) return false
12073 if (nOp
> ops.OP_16) return false
12075 var m = mOp - (ops.OP_1 -
1)
12076 var n = nOp - (ops.OP_1 -
1)
12077 if (n < m) return false
12079 var pubKeys = script.chunks.slice(
1, -
2)
12080 if (n < pubKeys.length) return false
12082 return pubKeys.every(isCanonicalPubKey)
12085 function isNullDataOutput (script) {
12086 return script.chunks[
0] === ops.OP_RETURN
12089 function classifyOutput (script) {
12090 typeForce('Script', script)
12092 if (isPubKeyHashOutput(script)) {
12093 return 'pubkeyhash'
12094 } else if (isScriptHashOutput(script)) {
12095 return 'scripthash'
12096 } else if (isMultisigOutput(script)) {
12098 } else if (isPubKeyOutput(script)) {
12100 } else if (isNullDataOutput(script)) {
12104 return 'nonstandard'
12107 function classifyInput (script, allowIncomplete) {
12108 typeForce('Script', script)
12110 if (isPubKeyHashInput(script)) {
12111 return 'pubkeyhash'
12112 } else if (isMultisigInput(script, allowIncomplete)) {
12114 } else if (isScriptHashInput(script, allowIncomplete)) {
12115 return 'scripthash'
12116 } else if (isPubKeyInput(script)) {
12120 return 'nonstandard'
12123 // Standard Script Templates
12124 // {pubKey} OP_CHECKSIG
12125 function pubKeyOutput (pubKey) {
12126 return Script.fromChunks([
12132 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12133 function pubKeyHashOutput (hash) {
12134 typeForce('Buffer', hash)
12136 return Script.fromChunks([
12140 ops.OP_EQUALVERIFY,
12145 // OP_HASH160 {scriptHash} OP_EQUAL
12146 function scriptHashOutput (hash) {
12147 typeForce('Buffer', hash)
12149 return Script.fromChunks([
12156 // m [pubKeys ...] n OP_CHECKMULTISIG
12157 function multisigOutput (m, pubKeys) {
12158 typeForce(['ECPubKey'], pubKeys)
12160 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12162 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12163 return pubKey.toBuffer()
12165 var n = pubKeys.length
12167 return Script.fromChunks([].concat(
12168 (ops.OP_1 -
1) + m,
12170 (ops.OP_1 -
1) + n,
12171 ops.OP_CHECKMULTISIG
12176 function pubKeyInput (signature) {
12177 typeForce('Buffer', signature)
12179 return Script.fromChunks([signature])
12182 // {signature} {pubKey}
12183 function pubKeyHashInput (signature, pubKey) {
12184 typeForce('Buffer', signature)
12186 return Script.fromChunks([signature, pubKey.toBuffer()])
12189 //
<scriptSig> {serialized scriptPubKey script}
12190 function scriptHashInput (scriptSig, scriptPubKey) {
12191 return Script.fromChunks([].concat(
12193 scriptPubKey.toBuffer()
12197 // OP_0 [signatures ...]
12198 function multisigInput (signatures, scriptPubKey) {
12199 if (scriptPubKey) {
12200 assert(isMultisigOutput(scriptPubKey))
12202 var mOp = scriptPubKey.chunks[
0]
12203 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12204 var m = mOp - (ops.OP_1 -
1)
12205 var n = nOp - (ops.OP_1 -
1)
12207 assert(signatures.length
>= m, 'Not enough signatures provided')
12208 assert(signatures.length <= n, 'Too many signatures provided')
12211 return Script.fromChunks([].concat(ops.OP_0, signatures))
12214 function nullDataOutput (data) {
12215 return Script.fromChunks([ops.OP_RETURN, data])
12219 isCanonicalPubKey: isCanonicalPubKey,
12220 isCanonicalSignature: isCanonicalSignature,
12221 isPubKeyHashInput: isPubKeyHashInput,
12222 isPubKeyHashOutput: isPubKeyHashOutput,
12223 isPubKeyInput: isPubKeyInput,
12224 isPubKeyOutput: isPubKeyOutput,
12225 isScriptHashInput: isScriptHashInput,
12226 isScriptHashOutput: isScriptHashOutput,
12227 isMultisigInput: isMultisigInput,
12228 isMultisigOutput: isMultisigOutput,
12229 isNullDataOutput: isNullDataOutput,
12230 classifyOutput: classifyOutput,
12231 classifyInput: classifyInput,
12232 pubKeyOutput: pubKeyOutput,
12233 pubKeyHashOutput: pubKeyHashOutput,
12234 scriptHashOutput: scriptHashOutput,
12235 multisigOutput: multisigOutput,
12236 pubKeyInput: pubKeyInput,
12237 pubKeyHashInput: pubKeyHashInput,
12238 scriptHashInput: scriptHashInput,
12239 multisigInput: multisigInput,
12240 dataOutput: function (data) {
12241 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12242 return nullDataOutput(data)
12244 nullDataOutput: nullDataOutput
12247 }).call(this,require("buffer").Buffer)
12248 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12249 (function (Buffer){
12250 var assert = require('assert')
12251 var bufferutils = require('./bufferutils')
12252 var crypto = require('./crypto')
12253 var typeForce = require('typeforce')
12254 var opcodes = require('./opcodes')
12255 var scripts = require('./scripts')
12257 var Address = require('./address')
12258 var ECSignature = require('./ecsignature')
12259 var Script = require('./script')
12261 function Transaction () {
12268 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12269 Transaction.SIGHASH_ALL =
0x01
12270 Transaction.SIGHASH_NONE =
0x02
12271 Transaction.SIGHASH_SINGLE =
0x03
12272 Transaction.SIGHASH_ANYONECANPAY =
0x80
12274 Transaction.fromBuffer = function (buffer, __disableAssert) {
12276 function readSlice (n) {
12278 return buffer.slice(offset - n, offset)
12281 function readUInt32 () {
12282 var i = buffer.readUInt32LE(offset)
12287 function readUInt64 () {
12288 var i = bufferutils.readUInt64LE(buffer, offset)
12293 function readVarInt () {
12294 var vi = bufferutils.readVarInt(buffer, offset)
12299 function readScript () {
12300 return Script.fromBuffer(readSlice(readVarInt()))
12303 function readGenerationScript () {
12304 return new Script(readSlice(readVarInt()), [])
12307 var tx = new Transaction()
12308 tx.version = readUInt32()
12310 var vinLen = readVarInt()
12311 for (var i =
0; i < vinLen; ++i) {
12312 var hash = readSlice(
32)
12314 if (Transaction.isCoinbaseHash(hash)) {
12317 index: readUInt32(),
12318 script: readGenerationScript(),
12319 sequence: readUInt32()
12324 index: readUInt32(),
12325 script: readScript(),
12326 sequence: readUInt32()
12331 var voutLen = readVarInt()
12332 for (i =
0; i < voutLen; ++i) {
12334 value: readUInt64(),
12335 script: readScript()
12339 tx.locktime = readUInt32()
12341 if (!__disableAssert) {
12342 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12348 Transaction.fromHex = function (hex) {
12349 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12352 Transaction.isCoinbaseHash = function (buffer) {
12353 return Array.prototype.every.call(buffer, function (x) {
12359 * Create a new txIn.
12361 * Can be called with any of:
12363 * - A transaction and an index
12364 * - A transaction hash and an index
12366 * Note that this method does not sign the created input.
12368 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12369 if (sequence === undefined || sequence === null) {
12370 sequence = Transaction.DEFAULT_SEQUENCE
12373 script = script || Script.EMPTY
12375 if (typeof hash === 'string') {
12376 // TxId hex is big-endian, we need little-endian
12377 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12378 } else if (hash instanceof Transaction) {
12379 hash = hash.getHash()
12382 typeForce('Buffer', hash)
12383 typeForce('Number', index)
12384 typeForce('Number', sequence)
12385 typeForce('Script', script)
12387 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12389 // Add the input and return the input's index
12390 return (this.ins.push({
12399 * Create a new txOut.
12401 * Can be called with:
12403 * - A base58 address string and a value
12404 * - An Address object and a value
12405 * - A scriptPubKey Script and a value
12407 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12408 // Attempt to get a valid address if it's a base58 address string
12409 if (typeof scriptPubKey === 'string') {
12410 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12413 // Attempt to get a valid script if it's an Address object
12414 if (scriptPubKey instanceof Address) {
12415 scriptPubKey = scriptPubKey.toOutputScript()
12418 typeForce('Script', scriptPubKey)
12419 typeForce('Number', value)
12421 // Add the output and return the output's index
12422 return (this.outs.push({
12423 script: scriptPubKey,
12428 Transaction.prototype.clone = function () {
12429 var newTx = new Transaction()
12430 newTx.version = this.version
12431 newTx.locktime = this.locktime
12433 newTx.ins = this.ins.map(function (txIn) {
12437 script: txIn.script,
12438 sequence: txIn.sequence
12442 newTx.outs = this.outs.map(function (txOut) {
12444 script: txOut.script,
12453 * Hash transaction for signing a specific input.
12455 * Bitcoin uses a different hash for each signed transaction input. This
12456 * method copies the transaction, makes the necessary changes based on the
12457 * hashType, serializes and finally hashes the result. This hash can then be
12458 * used to sign the transaction input in question.
12460 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12461 // FIXME: remove in
2.x.y
12462 if (arguments[
0] instanceof Script) {
12463 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12465 // swap the arguments (must be stored in tmp, arguments is special)
12466 var tmp = arguments[
0]
12467 inIndex = arguments[
1]
12468 prevOutScript = tmp
12471 typeForce('Number', inIndex)
12472 typeForce('Script', prevOutScript)
12473 typeForce('Number', hashType)
12475 assert(inIndex
>=
0, 'Invalid vin index')
12476 assert(inIndex < this.ins.length, 'Invalid vin index')
12478 var txTmp = this.clone()
12479 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12481 // Blank out other inputs' signatures
12482 txTmp.ins.forEach(function (txIn) {
12483 txIn.script = Script.EMPTY
12485 txTmp.ins[inIndex].script = hashScript
12487 var hashTypeModifier = hashType &
0x1f
12489 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12490 assert(false, 'SIGHASH_NONE not yet supported')
12491 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12492 assert(false, 'SIGHASH_SINGLE not yet supported')
12495 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12496 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12499 var hashTypeBuffer = new Buffer(
4)
12500 hashTypeBuffer.writeInt32LE(hashType,
0)
12502 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12503 return crypto.hash256(buffer)
12506 Transaction.prototype.getHash = function () {
12507 return crypto.hash256(this.toBuffer())
12510 Transaction.prototype.getId = function () {
12511 // TxHash is little-endian, we need big-endian
12512 return bufferutils.reverse(this.getHash()).toString('hex')
12515 Transaction.prototype.toBuffer = function () {
12516 function scriptSize (script) {
12517 var length = script.buffer.length
12519 return bufferutils.varIntSize(length) + length
12522 var buffer = new Buffer(
12524 bufferutils.varIntSize(this.ins.length) +
12525 bufferutils.varIntSize(this.outs.length) +
12526 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12527 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12531 function writeSlice (slice) {
12532 slice.copy(buffer, offset)
12533 offset += slice.length
12536 function writeUInt32 (i) {
12537 buffer.writeUInt32LE(i, offset)
12541 function writeUInt64 (i) {
12542 bufferutils.writeUInt64LE(buffer, i, offset)
12546 function writeVarInt (i) {
12547 var n = bufferutils.writeVarInt(buffer, i, offset)
12551 writeUInt32(this.version)
12552 writeVarInt(this.ins.length)
12554 this.ins.forEach(function (txIn) {
12555 writeSlice(txIn.hash)
12556 writeUInt32(txIn.index)
12557 writeVarInt(txIn.script.buffer.length)
12558 writeSlice(txIn.script.buffer)
12559 writeUInt32(txIn.sequence)
12562 writeVarInt(this.outs.length)
12563 this.outs.forEach(function (txOut) {
12564 writeUInt64(txOut.value)
12565 writeVarInt(txOut.script.buffer.length)
12566 writeSlice(txOut.script.buffer)
12569 writeUInt32(this.locktime)
12574 Transaction.prototype.toHex = function () {
12575 return this.toBuffer().toString('hex')
12578 Transaction.prototype.setInputScript = function (index, script) {
12579 typeForce('Number', index)
12580 typeForce('Script', script)
12582 this.ins[index].script = script
12585 // FIXME: remove in
2.x.y
12586 Transaction.prototype.sign = function (index, privKey, hashType) {
12587 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12589 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12590 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12592 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12593 this.setInputScript(index, scriptSig)
12596 // FIXME: remove in
2.x.y
12597 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12598 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12600 hashType = hashType || Transaction.SIGHASH_ALL
12602 var hash = this.hashForSignature(index, prevOutScript, hashType)
12603 var signature = privKey.sign(hash)
12605 return signature.toScriptSignature(hashType)
12608 // FIXME: remove in
2.x.y
12609 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12610 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12612 var parsed = ECSignature.parseScriptSignature(buffer)
12613 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12615 return pubKey.verify(hash, parsed.signature)
12618 module.exports = Transaction
12620 }).call(this,require("buffer").Buffer)
12621 },{"./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){
12622 (function (Buffer){
12623 var assert = require('assert')
12624 var ops = require('./opcodes')
12625 var scripts = require('./scripts')
12627 var ECPubKey = require('./ecpubkey')
12628 var ECSignature = require('./ecsignature')
12629 var Script = require('./script')
12630 var Transaction = require('./transaction')
12632 function extractInput (txIn) {
12634 var scriptSig = txIn.script
12636 var prevOutType = scripts.classifyInput(scriptSig, true)
12639 // Re-classify if scriptHash
12640 if (prevOutType === 'scripthash') {
12641 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12642 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12644 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12645 scriptType = scripts.classifyInput(scriptSig, true)
12647 scriptType = prevOutType
12650 // Extract hashType, pubKeys and signatures
12651 var hashType, parsed, pubKeys, signatures
12653 switch (scriptType) {
12654 case 'pubkeyhash': {
12655 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12656 hashType = parsed.hashType
12657 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12658 signatures = [parsed.signature]
12659 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12665 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12666 hashType = parsed.hashType
12667 signatures = [parsed.signature]
12669 if (redeemScript) {
12670 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12677 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12678 if (chunk === ops.OP_0) return chunk
12680 var parsed = ECSignature.parseScriptSignature(chunk)
12681 hashType = parsed.hashType
12683 return parsed.signature
12686 if (redeemScript) {
12687 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12695 hashType: hashType,
12696 prevOutScript: prevOutScript,
12697 prevOutType: prevOutType,
12699 redeemScript: redeemScript,
12700 scriptType: scriptType,
12701 signatures: signatures
12705 function TransactionBuilder () {
12706 this.prevTxMap = {}
12707 this.prevOutScripts = {}
12708 this.prevOutTypes = {}
12711 this.tx = new Transaction()
12714 TransactionBuilder.fromTransaction = function (transaction) {
12715 var txb = new TransactionBuilder()
12717 // Copy other transaction fields
12718 txb.tx.version = transaction.version
12719 txb.tx.locktime = transaction.locktime
12721 // Extract/add inputs
12722 transaction.ins.forEach(function (txIn) {
12723 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12726 // Extract/add outputs
12727 transaction.outs.forEach(function (txOut) {
12728 txb.addOutput(txOut.script, txOut.value)
12731 // Extract/add signatures
12732 txb.inputs = transaction.ins.map(function (txIn) {
12733 // TODO: remove me after testcase added
12734 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12736 // Ignore empty scripts
12737 if (txIn.script.buffer.length ===
0) return {}
12739 return extractInput(txIn)
12745 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12749 if (typeof prevTx === 'string') {
12750 prevOutHash = new Buffer(prevTx, 'hex')
12752 // TxId hex is big-endian, we want little-endian hash
12753 Array.prototype.reverse.call(prevOutHash)
12756 } else if (prevTx instanceof Transaction) {
12757 prevOutHash = prevTx.getHash()
12758 prevOutScript = prevTx.outs[index].script
12762 prevOutHash = prevTx
12766 if (prevOutScript) {
12767 var prevOutType = scripts.classifyOutput(prevOutScript)
12769 // if we can, extract pubKey information
12770 switch (prevOutType) {
12772 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12777 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12782 if (prevOutType !== 'scripthash') {
12783 input.scriptType = prevOutType
12786 input.prevOutScript = prevOutScript
12787 input.prevOutType = prevOutType
12790 assert(this.inputs.every(function (input2) {
12791 if (input2.hashType === undefined) return true
12793 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12794 }), 'No, this would invalidate signatures')
12796 var prevOut = prevOutHash.toString('hex') + ':' + index
12797 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12799 var vin = this.tx.addInput(prevOutHash, index, sequence)
12800 this.inputs[vin] = input
12801 this.prevTxMap[prevOut] = vin
12806 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12807 assert(this.inputs.every(function (input) {
12808 if (input.hashType === undefined) return true
12810 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12811 }), 'No, this would invalidate signatures')
12813 return this.tx.addOutput(scriptPubKey, value)
12816 TransactionBuilder.prototype.build = function () {
12817 return this.__build(false)
12819 TransactionBuilder.prototype.buildIncomplete = function () {
12820 return this.__build(true)
12823 var canSignTypes = {
12824 'pubkeyhash': true,
12829 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12830 if (!allowIncomplete) {
12831 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12832 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12835 var tx = this.tx.clone()
12837 // Create script signatures from signature meta-data
12838 this.inputs.forEach(function (input, index) {
12839 var scriptType = input.scriptType
12842 if (!allowIncomplete) {
12843 assert(!!scriptType, 'Transaction is not complete')
12844 assert(scriptType in canSignTypes, scriptType + ' not supported')
12845 assert(input.signatures, 'Transaction is missing signatures')
12848 if (input.signatures) {
12849 switch (scriptType) {
12850 case 'pubkeyhash': {
12851 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12852 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12857 // Array.prototype.map is sparse-compatible
12858 var msSignatures = input.signatures.map(function (signature) {
12859 return signature && signature.toScriptSignature(input.hashType)
12862 // fill in blanks with OP_0
12863 if (allowIncomplete) {
12864 for (var i =
0; i < msSignatures.length; ++i) {
12865 if (msSignatures[i]) continue
12867 msSignatures[i] = ops.OP_0
12870 // Array.prototype.filter returns non-sparse array
12871 msSignatures = msSignatures.filter(function (x) { return x })
12874 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12875 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12880 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12881 scriptSig = scripts.pubKeyInput(pkSignature)
12887 // did we build a scriptSig?
12889 // wrap as scriptHash if necessary
12890 if (input.prevOutType === 'scripthash') {
12891 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12894 tx.setInputScript(index, scriptSig)
12901 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12902 assert(index in this.inputs, 'No input at index: ' + index)
12903 hashType = hashType || Transaction.SIGHASH_ALL
12905 var input = this.inputs[index]
12906 var canSign = input.hashType &&
12907 input.prevOutScript &&
12908 input.prevOutType &&
12910 input.scriptType &&
12913 // are we almost ready to sign?
12915 // if redeemScript was provided, enforce consistency
12916 if (redeemScript) {
12917 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12920 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12924 // must be pay-to-scriptHash?
12925 if (redeemScript) {
12926 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12927 if (input.prevOutScript) {
12928 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12930 var scriptHash = input.prevOutScript.chunks[
1]
12931 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12934 var scriptType = scripts.classifyOutput(redeemScript)
12935 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12938 switch (scriptType) {
12940 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12944 case 'pubkeyhash': {
12945 var pkh1 = redeemScript.chunks[
2]
12946 var pkh2 = privKey.pub.getAddress().hash
12948 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12949 pubKeys = [privKey.pub]
12954 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12959 if (!input.prevOutScript) {
12960 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12961 input.prevOutType = 'scripthash'
12964 input.pubKeys = pubKeys
12965 input.redeemScript = redeemScript
12966 input.scriptType = scriptType
12968 // cannot be pay-to-scriptHash
12970 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12972 // can we otherwise sign this?
12973 if (input.scriptType) {
12974 assert(input.pubKeys, input.scriptType + ' not supported')
12976 // we know nothin' Jon Snow, assume pubKeyHash
12978 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12979 input.prevOutType = 'pubkeyhash'
12980 input.pubKeys = [privKey.pub]
12981 input.scriptType = input.prevOutType
12985 input.hashType = hashType
12986 input.signatures = input.signatures || []
12989 var signatureScript = input.redeemScript || input.prevOutScript
12990 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12992 // enforce signature order matches public keys
12993 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12994 // maintain a local copy of unmatched signatures
12995 var unmatched = input.signatures.slice()
12997 input.signatures = input.pubKeys.map(function (pubKey) {
13000 // check for any matching signatures
13001 unmatched.some(function (signature, i) {
13002 if (!pubKey.verify(signatureHash, signature)) return false
13005 // remove matched signature from unmatched
13006 unmatched.splice(i,
1)
13011 return match || undefined
13015 // enforce in order signing of public keys
13016 assert(input.pubKeys.some(function (pubKey, i) {
13017 if (!privKey.pub.Q.equals(pubKey.Q)) return false
13019 assert(!input.signatures[i], 'Signature already exists')
13020 var signature = privKey.sign(signatureHash)
13021 input.signatures[i] = signature
13024 }, this), 'privateKey cannot sign for this input')
13027 module.exports = TransactionBuilder
13029 }).call(this,require(
"buffer").Buffer)
13030 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
13031 (function (Buffer){
13032 var assert = require('assert')
13033 var bufferutils = require('./bufferutils')
13034 var typeForce = require('typeforce')
13035 var networks = require('./networks')
13036 var randomBytes = require('randombytes')
13038 var Address = require('./address')
13039 var HDNode = require('./hdnode')
13040 var TransactionBuilder = require('./transaction_builder')
13041 var Script = require('./script')
13043 function Wallet (seed, network) {
13044 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
13046 seed = seed || randomBytes(
32)
13047 network = network || networks.bitcoin
13049 // Stored in a closure to make accidental serialization less likely
13050 var masterKey = HDNode.fromSeedBuffer(seed, network)
13052 // HD first-level child derivation method should be hardened
13053 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
13054 var accountZero = masterKey.deriveHardened(
0)
13055 var externalAccount = accountZero.derive(
0)
13056 var internalAccount = accountZero.derive(
1)
13058 this.addresses = []
13059 this.changeAddresses = []
13060 this.network = network
13063 // FIXME: remove in
2.0.0
13064 this.unspentMap = {}
13066 // FIXME: remove in
2.0.0
13068 this.newMasterKey = function (seed) {
13069 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13071 seed = seed || randomBytes(
32)
13072 masterKey = HDNode.fromSeedBuffer(seed, network)
13074 accountZero = masterKey.deriveHardened(
0)
13075 externalAccount = accountZero.derive(
0)
13076 internalAccount = accountZero.derive(
1)
13079 me.changeAddresses = []
13085 this.getMasterKey = function () {
13088 this.getAccountZero = function () {
13091 this.getExternalAccount = function () {
13092 return externalAccount
13094 this.getInternalAccount = function () {
13095 return internalAccount
13099 Wallet.prototype.createTransaction = function (to, value, options) {
13100 // FIXME: remove in
2.0.0
13101 if (typeof options !== 'object') {
13102 if (options !== undefined) {
13103 console.warn('Non options object parameters are deprecated, use options object instead')
13106 fixedFee: arguments[
2],
13107 changeAddress: arguments[
3]
13112 options = options || {}
13114 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13116 var changeAddress = options.changeAddress
13117 var fixedFee = options.fixedFee
13118 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13120 // filter by minConf, then pending and sort by descending value
13121 var unspents = this.unspents.filter(function (unspent) {
13122 return unspent.confirmations
>= minConf
13123 }).filter(function (unspent) {
13124 return !unspent.pending
13125 }).sort(function (o1, o2) {
13126 return o2.value - o1.value
13131 var subTotal = value
13133 var txb = new TransactionBuilder()
13134 txb.addOutput(to, value)
13136 for (var i =
0; i < unspents.length; ++i) {
13137 var unspent = unspents[i]
13138 addresses.push(unspent.address)
13140 txb.addInput(unspent.txHash, unspent.index)
13142 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13144 accum += unspent.value
13145 subTotal = value + fee
13147 if (accum
>= subTotal) {
13148 var change = accum - subTotal
13150 if (change
> this.network.dustThreshold) {
13151 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13158 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13160 return this.signWith(txb, addresses).build()
13163 // FIXME: remove in
2.0.0
13164 Wallet.prototype.processPendingTx = function (tx) {
13165 this.__processTx(tx, true)
13168 // FIXME: remove in
2.0.0
13169 Wallet.prototype.processConfirmedTx = function (tx) {
13170 this.__processTx(tx, false)
13173 // FIXME: remove in
2.0.0
13174 Wallet.prototype.__processTx = function (tx, isPending) {
13175 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13177 var txId = tx.getId()
13178 var txHash = tx.getHash()
13180 tx.outs.forEach(function (txOut, i) {
13184 address = Address.fromOutputScript(txOut.script, this.network).toString()
13186 if (!(e.message.match(/has no matching Address/)))
13190 var myAddresses = this.addresses.concat(this.changeAddresses)
13191 if (myAddresses.indexOf(address)
> -
1) {
13192 var lookup = txId + ':' + i
13193 if (lookup in this.unspentMap) return
13195 // its unique, add it
13198 confirmations:
0, // no way to determine this without more information
13202 value: txOut.value,
13206 this.unspentMap[lookup] = unspent
13207 this.unspents.push(unspent)
13211 tx.ins.forEach(function (txIn) {
13212 // copy and convert to big-endian hex
13213 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13215 var lookup = txInId + ':' + txIn.index
13216 if (!(lookup in this.unspentMap)) return
13218 var unspent = this.unspentMap[lookup]
13221 unspent.pending = true
13222 unspent.spent = true
13224 delete this.unspentMap[lookup]
13226 this.unspents = this.unspents.filter(function (unspent2) {
13227 return unspent !== unspent2
13233 Wallet.prototype.generateAddress = function () {
13234 var k = this.addresses.length
13235 var address = this.getExternalAccount().derive(k).getAddress()
13237 this.addresses.push(address.toString())
13239 return this.getReceiveAddress()
13242 Wallet.prototype.generateChangeAddress = function () {
13243 var k = this.changeAddresses.length
13244 var address = this.getInternalAccount().derive(k).getAddress()
13246 this.changeAddresses.push(address.toString())
13248 return this.getChangeAddress()
13251 Wallet.prototype.getAddress = function () {
13252 if (this.addresses.length ===
0) {
13253 this.generateAddress()
13256 return this.addresses[this.addresses.length -
1]
13259 Wallet.prototype.getBalance = function (minConf) {
13260 minConf = minConf ||
0
13262 return this.unspents.filter(function (unspent) {
13263 return unspent.confirmations
>= minConf
13265 // FIXME: remove spent filter in
2.0.0
13266 }).filter(function (unspent) {
13267 return !unspent.spent
13268 }).reduce(function (accum, unspent) {
13269 return accum + unspent.value
13273 Wallet.prototype.getChangeAddress = function () {
13274 if (this.changeAddresses.length ===
0) {
13275 this.generateChangeAddress()
13278 return this.changeAddresses[this.changeAddresses.length -
1]
13281 Wallet.prototype.getInternalPrivateKey = function (index) {
13282 return this.getInternalAccount().derive(index).privKey
13285 Wallet.prototype.getPrivateKey = function (index) {
13286 return this.getExternalAccount().derive(index).privKey
13289 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13292 if ((index = this.addresses.indexOf(address))
> -
1) {
13293 return this.getPrivateKey(index)
13296 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13297 return this.getInternalPrivateKey(index)
13300 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13303 Wallet.prototype.getUnspentOutputs = function (minConf) {
13304 minConf = minConf ||
0
13306 return this.unspents.filter(function (unspent) {
13307 return unspent.confirmations
>= minConf
13309 // FIXME: remove spent filter in
2.0.0
13310 }).filter(function (unspent) {
13311 return !unspent.spent
13312 }).map(function (unspent) {
13314 address: unspent.address,
13315 confirmations: unspent.confirmations,
13316 index: unspent.index,
13317 txId: unspent.txId,
13318 value: unspent.value,
13320 // FIXME: remove in
2.0.0
13321 hash: unspent.txId,
13322 pending: unspent.pending
13327 Wallet.prototype.setUnspentOutputs = function (unspents) {
13328 this.unspentMap = {}
13329 this.unspents = unspents.map(function (unspent) {
13330 // FIXME: remove unspent.hash in
2.0.0
13331 var txId = unspent.txId || unspent.hash
13332 var index = unspent.index
13334 // FIXME: remove in
2.0.0
13335 if (unspent.hash !== undefined) {
13336 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13339 // FIXME: remove in
2.0.0
13340 if (index === undefined) {
13341 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13342 index = unspent.outputIndex
13345 typeForce('String', txId)
13346 typeForce('Number', index)
13347 typeForce('Number', unspent.value)
13349 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13350 assert.doesNotThrow(function () {
13351 Address.fromBase58Check(unspent.address)
13352 }, 'Expected Base58 Address, got ' + unspent.address)
13353 assert(isFinite(index), 'Expected finite index, got ' + index)
13355 // FIXME: remove branch in
2.0.0
13356 if (unspent.confirmations !== undefined) {
13357 typeForce('Number', unspent.confirmations)
13360 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13363 address: unspent.address,
13364 confirmations: unspent.confirmations ||
0,
13368 value: unspent.value,
13370 // FIXME: remove in
2.0.0
13371 pending: unspent.pending || false
13374 // FIXME: remove in
2.0.0
13375 this.unspentMap[txId + ':' + index] = unspent
13381 Wallet.prototype.signWith = function (tx, addresses) {
13382 addresses.forEach(function (address, i) {
13383 var privKey = this.getPrivateKeyForAddress(address)
13385 tx.sign(i, privKey)
13391 function estimatePaddedFee (tx, network) {
13392 var tmpTx = tx.clone()
13393 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13395 return network.estimateFee(tmpTx)
13398 // FIXME:
1.0.0 shims, remove in
2.0.0
13399 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13400 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13402 module.exports = Wallet
13404 }).call(this,require("buffer").Buffer)
13405 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13407 <script>bitcoin.networks.shadow = {
13408 magicPrefix: '\x19ShadowCash Signed Message:\n',
13410 public:
0xEE80286A,
13411 private:
0xEE8031E8
13418 estimateFee: function() { return "unused in this app" },
13421 bitcoin.networks.shadowtn = {
13422 magicPrefix: '\x19ShadowCash Signed Message:\n',
13424 public:
0x76C0FDFB,
13425 private:
0x76C1077A
13432 estimateFee: function() { return "unused in this app" },
13435 bitcoin.networks.clam = {
13437 public:
0xa8c26d64,
13438 private:
0xa8c17826
13444 bitcoin.networks.dash = {
13446 public:
0x0488b21e,
13447 private:
0x0488ade4
13454 bitcoin.networks.namecoin = {
13456 public:
0x0488b21e,
13457 private:
0x0488ade4
13460 //scriptHash:
0x10,
13464 bitcoin.networks.peercoin = {
13466 public:
0x0488b21e,
13467 private:
0x0488ade4
13470 //scriptHash:
0x10,
13475 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13479 /** @fileOverview Javascript cryptography implementation.
13481 * Crush to remove comments, shorten variable names and
13482 * generally reduce transmission size.
13484 * @author Emily Stark
13485 * @author Mike Hamburg
13486 * @author Dan Boneh
13490 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13491 /*global document, window, escape, unescape, module, require, Uint32Array */
13493 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13495 /** @namespace Symmetric ciphers. */
13498 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13501 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13504 /** @namespace Block cipher modes of operation. */
13507 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13511 * @namespace Bit array encoders and decoders.
13514 * The members of this namespace are functions which translate between
13515 * SJCL's bitArrays and other objects (usually strings). Because it
13516 * isn't always clear which direction is encoding and which is decoding,
13517 * the method names are "fromBits" and "toBits".
13521 /** @namespace Exceptions. */
13523 /** @constructor Ciphertext is corrupt. */
13524 corrupt: function(message) {
13525 this.toString = function() { return "CORRUPT: "+this.message; };
13526 this.message = message;
13529 /** @constructor Invalid parameter. */
13530 invalid: function(message) {
13531 this.toString = function() { return "INVALID: "+this.message; };
13532 this.message = message;
13535 /** @constructor Bug or missing feature in SJCL. @constructor */
13536 bug: function(message) {
13537 this.toString = function() { return "BUG: "+this.message; };
13538 this.message = message;
13541 /** @constructor Something isn't ready. */
13542 notReady: function(message) {
13543 this.toString = function() { return "NOT READY: "+this.message; };
13544 this.message = message;
13549 if(typeof module !== 'undefined' && module.exports){
13550 module.exports = sjcl;
13552 if (typeof define === "function") {
13553 define([], function () {
13561 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13563 * @author Emily Stark
13564 * @author Mike Hamburg
13565 * @author Dan Boneh
13568 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13572 * These objects are the currency accepted by SJCL's crypto functions.
13576 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13577 * but many of them can take arguments that are not a multiple of
4 bytes.
13578 * This library encodes arrays of bits (whose size need not be a multiple of
8
13579 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13580 * array of words,
32 bits at a time. Since the words are double-precision
13581 * floating point numbers, they fit some extra data. We use this (in a private,
13582 * possibly-changing manner) to encode the number of bits actually present
13583 * in the last word of the array.
13587 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13588 * to ciphers like AES which want arrays of words.
13593 * Array slices in units of bits.
13594 * @param {bitArray} a The array to slice.
13595 * @param {Number} bstart The offset to the start of the slice, in bits.
13596 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13597 * slice until the end of the array.
13598 * @return {bitArray} The requested slice.
13600 bitSlice: function (a, bstart, bend) {
13601 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13602 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13606 * Extract a number packed into a bit array.
13607 * @param {bitArray} a The array to slice.
13608 * @param {Number} bstart The offset to the start of the slice, in bits.
13609 * @param {Number} length The length of the number to extract.
13610 * @return {Number} The requested slice.
13612 extract: function(a, bstart, blength) {
13613 // FIXME: this Math.floor is not necessary at all, but for some reason
13614 // seems to suppress a bug in the Chromium JIT.
13615 var x, sh = Math.floor((-bstart-blength) &
31);
13616 if ((bstart + blength -
1 ^ bstart) & -
32) {
13617 // it crosses a boundary
13618 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13620 // within a single word
13621 x = a[bstart/
32|
0]
>>> sh;
13623 return x & ((
1<
<blength) -
1);
13627 * Concatenate two bit arrays.
13628 * @param {bitArray} a1 The first array.
13629 * @param {bitArray} a2 The second array.
13630 * @return {bitArray} The concatenation of a1 and a2.
13632 concat: function (a1, a2) {
13633 if (a1.length ===
0 || a2.length ===
0) {
13634 return a1.concat(a2);
13637 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13638 if (shift ===
32) {
13639 return a1.concat(a2);
13641 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13646 * Find the length of an array of bits.
13647 * @param {bitArray} a The array.
13648 * @return {Number} The length of a, in bits.
13650 bitLength: function (a) {
13651 var l = a.length, x;
13652 if (l ===
0) { return
0; }
13654 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13658 * Truncate an array.
13659 * @param {bitArray} a The array.
13660 * @param {Number} len The length to truncate to, in bits.
13661 * @return {bitArray} A new array, truncated to len bits.
13663 clamp: function (a, len) {
13664 if (a.length *
32 < len) { return a; }
13665 a = a.slice(
0, Math.ceil(len /
32));
13668 if (l
> 0 && len) {
13669 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13675 * Make a partial word for a bit array.
13676 * @param {Number} len The number of bits in the word.
13677 * @param {Number} x The bits.
13678 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13679 * @return {Number} The partial word.
13681 partial: function (len, x, _end) {
13682 if (len ===
32) { return x; }
13683 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13687 * Get the number of bits used by a partial word.
13688 * @param {Number} x The partial word.
13689 * @return {Number} The number of bits used by the partial word.
13691 getPartial: function (x) {
13692 return Math.round(x/
0x10000000000) ||
32;
13696 * Compare two arrays for equality in a predictable amount of time.
13697 * @param {bitArray} a The first array.
13698 * @param {bitArray} b The second array.
13699 * @return {boolean} true if a == b; false otherwise.
13701 equal: function (a, b) {
13702 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13706 for (i=
0; i
<a.length; i++) {
13712 /** Shift an array right.
13713 * @param {bitArray} a The array to shift.
13714 * @param {Number} shift The number of bits to shift.
13715 * @param {Number} [carry=
0] A byte to carry in
13716 * @param {bitArray} [out=[]] An array to prepend to the output.
13719 _shiftRight: function (a, shift, carry, out) {
13720 var i, last2=
0, shift2;
13721 if (out === undefined) { out = []; }
13723 for (; shift
>=
32; shift -=
32) {
13728 return out.concat(a);
13731 for (i=
0; i
<a.length; i++) {
13732 out.push(carry | a[i]
>>>shift);
13733 carry = a[i] << (
32-shift);
13735 last2 = a.length ? a[a.length-
1] :
0;
13736 shift2 = sjcl.bitArray.getPartial(last2);
13737 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13741 /** xor a block of
4 words together.
13744 _xor4: function(x,y) {
13745 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13748 /** byteswap a word array inplace.
13749 * (does not handle partial words)
13750 * @param {sjcl.bitArray} a word array
13751 * @return {sjcl.bitArray} byteswapped array
13753 byteswapM: function(a) {
13754 var i, v, m =
0xff00;
13755 for (i =
0; i < a.length; ++i) {
13757 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13764 //// codecString.js
13766 /** @fileOverview Bit array codec implementations.
13768 * @author Emily Stark
13769 * @author Mike Hamburg
13770 * @author Dan Boneh
13773 /** @namespace UTF-
8 strings */
13774 sjcl.codec.utf8String = {
13775 /** Convert from a bitArray to a UTF-
8 string. */
13776 fromBits: function (arr) {
13777 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13778 for (i=
0; i
<bl/
8; i++) {
13782 out += String.fromCharCode(tmp
>>> 24);
13785 return decodeURIComponent(escape(out));
13788 /** Convert from a UTF-
8 string to a bitArray. */
13789 toBits: function (str) {
13790 str = unescape(encodeURIComponent(str));
13791 var out = [], i, tmp=
0;
13792 for (i=
0; i
<str.length; i++) {
13793 tmp = tmp <<
8 | str.charCodeAt(i);
13800 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13809 /** @fileOverview Bit array codec implementations.
13811 * @author Emily Stark
13812 * @author Mike Hamburg
13813 * @author Dan Boneh
13816 /** @namespace Hexadecimal */
13818 /** Convert from a bitArray to a hex string. */
13819 fromBits: function (arr) {
13821 for (i=
0; i
<arr.length; i++) {
13822 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13824 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13826 /** Convert from a hex string to a bitArray. */
13827 toBits: function (str) {
13828 var i, out=[], len;
13829 str = str.replace(/\s|
0x/g,
"");
13831 str = str +
"00000000";
13832 for (i=
0; i
<str.length; i+=
8) {
13833 out.push(parseInt(str.substr(i,
8),
16)^
0);
13835 return sjcl.bitArray.clamp(out, len*
4);
13842 /** @fileOverview Javascript SHA-
512 implementation.
13844 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13845 * SJCL by Stefan Thomas.
13847 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13848 * Released with New BSD License
13850 * @author Emily Stark
13851 * @author Mike Hamburg
13852 * @author Dan Boneh
13853 * @author Jeff Mott
13854 * @author Stefan Thomas
13858 * Context for a SHA-
512 operation in progress.
13860 * @class Secure Hash Algorithm,
512 bits.
13862 sjcl.hash.sha512 = function (hash) {
13863 if (!this._key[
0]) { this._precompute(); }
13865 this._h = hash._h.slice(
0);
13866 this._buffer = hash._buffer.slice(
0);
13867 this._length = hash._length;
13874 * Hash a string or an array of words.
13876 * @param {bitArray|String} data the data to hash.
13877 * @return {bitArray} The hash value, an array of
16 big-endian words.
13879 sjcl.hash.sha512.hash = function (data) {
13880 return (new sjcl.hash.sha512()).update(data).finalize();
13883 sjcl.hash.sha512.prototype = {
13885 * The hash's block size, in bits.
13891 * Reset the hash state.
13894 reset:function () {
13895 this._h = this._init.slice(
0);
13902 * Input several words to the hash.
13903 * @param {bitArray|String} data the data to hash.
13906 update: function (data) {
13907 if (typeof data ===
"string") {
13908 data = sjcl.codec.utf8String.toBits(data);
13910 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13912 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13913 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13914 this._block(b.splice(
0,
32));
13920 * Complete hashing and output the hash value.
13921 * @return {bitArray} The hash value, an array of
16 big-endian words.
13923 finalize:function () {
13924 var i, b = this._buffer, h = this._h;
13926 // Round out and push the buffer
13927 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13929 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13930 for (i = b.length +
4; i &
31; i++) {
13934 // append the length
13937 b.push(Math.floor(this._length /
0x100000000));
13938 b.push(this._length |
0);
13941 this._block(b.splice(
0,
32));
13949 * The SHA-
512 initialization vector, to be precomputed.
13955 * Least significant
24 bits of SHA512 initialization values.
13957 * Javascript only has
53 bits of precision, so we compute the
40 most
13958 * significant bits and add the remaining
24 bits as constants.
13962 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13966 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13967 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13971 * The SHA-
512 hash key, to be precomputed.
13977 * Least significant
24 bits of SHA512 key values.
13981 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13982 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13983 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13984 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13985 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13986 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13987 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13988 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13989 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13990 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13994 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13995 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13996 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13997 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13998 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13999 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
14000 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
14001 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
14002 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
14003 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
14004 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
14005 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
14006 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
14007 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
14008 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
14009 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
14010 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
14011 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
14012 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
14013 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
14017 * Function to precompute _init and _key.
14020 _precompute: function () {
14021 // XXX: This code is for precomputing the SHA256 constants, change for
14022 // SHA512 and re-enable.
14023 var i =
0, prime =
2, factor;
14025 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14026 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
14028 outer: for (; i
<80; prime++) {
14029 for (factor=
2; factor*factor <= prime; factor++) {
14030 if (prime % factor ===
0) {
14037 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
14038 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
14040 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
14041 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
14047 * Perform one cycle of SHA-
512.
14048 * @param {bitArray} words one block of words.
14051 _block:function (words) {
14053 w = words.slice(
0),
14056 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
14057 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
14058 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
14059 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
14061 // Working variables
14062 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14063 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14064 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14065 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14067 for (i=
0; i
<80; i++) {
14068 // load up the input word for this round
14071 wrl = w[i *
2 +
1];
14074 var gamma0xh = w[(i-
15) *
2];
14075 var gamma0xl = w[(i-
15) *
2 +
1];
14077 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
14078 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
14081 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
14082 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
14083 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
14086 var gamma1xh = w[(i-
2) *
2];
14087 var gamma1xl = w[(i-
2) *
2 +
1];
14089 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
14090 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
14093 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
14094 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
14095 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
14098 var wr7h = w[(i-
7) *
2];
14099 var wr7l = w[(i-
7) *
2 +
1];
14101 var wr16h = w[(i-
16) *
2];
14102 var wr16l = w[(i-
16) *
2 +
1];
14104 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
14105 wrl = gamma0l + wr7l;
14106 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14108 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14110 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14114 w[i*
2 +
1] = wrl |=
0;
14117 var chh = (eh & fh) ^ (~eh & gh);
14118 var chl = (el & fl) ^ (~el & gl);
14121 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14122 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14125 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14126 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14129 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14130 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14134 var krl = k[i*
2+
1];
14136 // t1 = h + sigma1 + ch + K(round) + W(round)
14137 var t1l = hl + sigma1l;
14138 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14140 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14142 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14143 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14144 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14146 // t2 = sigma0 + maj
14147 var t2l = sigma0l + majl;
14148 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14150 // Update working variables
14157 el = (dl + t1l) |
0;
14158 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14165 al = (t1l + t2l) |
0;
14166 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14169 // Intermediate hash
14170 h0l = h[
1] = (h0l + al) |
0;
14171 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14172 h1l = h[
3] = (h1l + bl) |
0;
14173 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14174 h2l = h[
5] = (h2l + cl) |
0;
14175 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14176 h3l = h[
7] = (h3l + dl) |
0;
14177 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14178 h4l = h[
9] = (h4l + el) |
0;
14179 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14180 h5l = h[
11] = (h5l + fl) |
0;
14181 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14182 h6l = h[
13] = (h6l + gl) |
0;
14183 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14184 h7l = h[
15] = (h7l + hl) |
0;
14185 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14192 /** @fileOverview HMAC implementation.
14194 * @author Emily Stark
14195 * @author Mike Hamburg
14196 * @author Dan Boneh
14199 /** HMAC with the specified hash function.
14201 * @param {bitArray} key the key for HMAC.
14202 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14204 sjcl.misc.hmac = function (key, Hash) {
14205 this._hash = Hash = Hash || sjcl.hash.sha256;
14206 var exKey = [[],[]], i,
14207 bs = Hash.prototype.blockSize /
32;
14208 this._baseHash = [new Hash(), new Hash()];
14210 if (key.length
> bs) {
14211 key = Hash.hash(key);
14214 for (i=
0; i
<bs; i++) {
14215 exKey[
0][i] = key[i]^
0x36363636;
14216 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14219 this._baseHash[
0].update(exKey[
0]);
14220 this._baseHash[
1].update(exKey[
1]);
14221 this._resultHash = new Hash(this._baseHash[
0]);
14224 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14225 * @param {bitArray|String} data The data to mac.
14227 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14228 if (!this._updated) {
14230 return this.digest(data);
14232 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14236 sjcl.misc.hmac.prototype.reset = function () {
14237 this._resultHash = new this._hash(this._baseHash[
0]);
14238 this._updated = false;
14241 sjcl.misc.hmac.prototype.update = function (data) {
14242 this._updated = true;
14243 this._resultHash.update(data);
14246 sjcl.misc.hmac.prototype.digest = function () {
14247 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14258 /** @fileOverview Password-based key-derivation function, version
2.0.
14260 * @author Emily Stark
14261 * @author Mike Hamburg
14262 * @author Dan Boneh
14265 /** Password-Based Key-Derivation Function, version
2.0.
14267 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14269 * This is the method specified by RSA's PKCS #
5 standard.
14271 * @param {bitArray|String} password The password.
14272 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14273 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14274 * @param {Number} [length] The length of the derived key. Defaults to the
14275 output size of the hash function.
14276 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14277 * @return {bitArray} the derived key.
14279 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14280 count = count ||
1000;
14282 if (length <
0 || count <
0) {
14283 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14286 if (typeof password ===
"string") {
14287 password = sjcl.codec.utf8String.toBits(password);
14290 if (typeof salt ===
"string") {
14291 salt = sjcl.codec.utf8String.toBits(salt);
14294 Prff = Prff || sjcl.misc.hmac;
14296 var prf = new Prff(password),
14297 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14299 for (k =
1;
32 * out.length < (length ||
1); k++) {
14300 u = ui = prf.encrypt(b.concat(salt,[k]));
14302 for (i=
1; i
<count; i++) {
14303 ui = prf.encrypt(ui);
14304 for (j=
0; j
<ui.length; j++) {
14309 out = out.concat(u);
14312 if (length) { out = b.clamp(out, length); }
14320 /** @fileOverview Javascript SHA-
256 implementation.
14322 * An older version of this implementation is available in the public
14323 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14324 * Stanford University
2008-
2010 and BSD-licensed for liability
14327 * Special thanks to Aldo Cortesi for pointing out several bugs in
14330 * @author Emily Stark
14331 * @author Mike Hamburg
14332 * @author Dan Boneh
14336 * Context for a SHA-
256 operation in progress.
14338 * @class Secure Hash Algorithm,
256 bits.
14340 sjcl.hash.sha256 = function (hash) {
14341 if (!this._key[
0]) { this._precompute(); }
14343 this._h = hash._h.slice(
0);
14344 this._buffer = hash._buffer.slice(
0);
14345 this._length = hash._length;
14352 * Hash a string or an array of words.
14354 * @param {bitArray|String} data the data to hash.
14355 * @return {bitArray} The hash value, an array of
16 big-endian words.
14357 sjcl.hash.sha256.hash = function (data) {
14358 return (new sjcl.hash.sha256()).update(data).finalize();
14361 sjcl.hash.sha256.prototype = {
14363 * The hash's block size, in bits.
14369 * Reset the hash state.
14372 reset:function () {
14373 this._h = this._init.slice(
0);
14380 * Input several words to the hash.
14381 * @param {bitArray|String} data the data to hash.
14384 update: function (data) {
14385 if (typeof data ===
"string") {
14386 data = sjcl.codec.utf8String.toBits(data);
14388 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14390 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14391 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14392 this._block(b.splice(
0,
16));
14398 * Complete hashing and output the hash value.
14399 * @return {bitArray} The hash value, an array of
8 big-endian words.
14401 finalize:function () {
14402 var i, b = this._buffer, h = this._h;
14404 // Round out and push the buffer
14405 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14407 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14408 for (i = b.length +
2; i &
15; i++) {
14412 // append the length
14413 b.push(Math.floor(this._length /
0x100000000));
14414 b.push(this._length |
0);
14417 this._block(b.splice(
0,
16));
14425 * The SHA-
256 initialization vector, to be precomputed.
14430 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14434 * The SHA-
256 hash key, to be precomputed.
14440 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14441 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14442 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14443 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14444 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14445 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14446 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14447 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14452 * Function to precompute _init and _key.
14455 _precompute: function () {
14456 var i =
0, prime =
2, factor;
14458 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14460 outer: for (; i
<64; prime++) {
14461 for (factor=
2; factor*factor <= prime; factor++) {
14462 if (prime % factor ===
0) {
14469 this._init[i] = frac(Math.pow(prime,
1/
2));
14471 this._key[i] = frac(Math.pow(prime,
1/
3));
14477 * Perform one cycle of SHA-
256.
14478 * @param {bitArray} words one block of words.
14481 _block:function (words) {
14483 w = words.slice(
0),
14486 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14487 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14489 /* Rationale for placement of |
0 :
14490 * If a value can overflow is original
32 bits by a factor of more than a few
14491 * million (
2^
23 ish), there is a possibility that it might overflow the
14492 *
53-bit mantissa and lose precision.
14494 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14495 * propagates around the loop, and on the hash state h[]. I don't believe
14496 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14497 * (for h4 anyway), and better safe than sorry.
14499 * The clamps on h[] are necessary for the output to be correct even in the
14500 * common case and for short inputs.
14502 for (i=
0; i
<64; i++) {
14503 // load up the input word for this round
14507 a = w[(i+
1 ) &
15];
14508 b = w[(i+
14) &
15];
14509 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14510 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14511 w[i&
15] + w[(i+
9) &
15]) |
0;
14514 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14517 h7 = h6; h6 = h5; h5 = h4;
14519 h3 = h2; h2 = h1; h1 = h0;
14521 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14524 h[
0] = h[
0]+h0 |
0;
14525 h[
1] = h[
1]+h1 |
0;
14526 h[
2] = h[
2]+h2 |
0;
14527 h[
3] = h[
3]+h3 |
0;
14528 h[
4] = h[
4]+h4 |
0;
14529 h[
5] = h[
5]+h5 |
0;
14530 h[
6] = h[
6]+h6 |
0;
14531 h[
7] = h[
7]+h7 |
0;
14535 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14536 WORDLISTS["english"] = [
14537 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14538 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14539 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14540 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14541 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14542 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14543 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14544 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14545 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14546 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14547 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14548 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14549 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14550 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14551 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14552 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14553 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14554 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14555 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14556 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14557 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14558 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14559 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14560 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14561 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14562 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14563 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14564 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14565 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14566 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14567 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14568 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14569 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14570 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14571 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14572 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14573 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14574 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14575 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14576 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14577 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14578 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14579 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14580 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14581 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14582 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14583 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14584 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14585 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14586 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14587 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14588 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14589 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14590 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14591 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14592 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14593 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14594 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14595 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14596 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14597 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14598 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14599 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14600 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14601 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14602 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14603 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14604 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14605 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14606 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14607 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14608 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14609 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14610 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14611 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14612 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14613 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14614 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14615 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14616 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14617 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14618 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14619 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14620 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14621 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14622 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14623 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14624 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14625 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14626 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14627 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14628 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14629 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14630 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14631 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14632 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14633 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14634 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14635 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14636 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14637 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14638 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14639 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14640 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14641 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14642 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14643 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14644 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14645 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14646 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14647 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14648 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14649 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14650 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14651 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14652 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14653 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14654 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14655 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14656 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14657 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14658 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14659 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14660 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14661 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14662 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14663 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14664 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14665 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14666 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14667 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14668 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14669 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14670 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14671 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14672 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14673 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14674 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14675 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14676 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14677 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14678 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14679 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14680 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14681 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14682 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14683 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14684 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14685 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14686 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14687 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14688 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14689 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14690 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14691 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14692 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14693 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14694 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14695 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14696 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14697 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14698 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14699 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14700 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14701 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14702 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14703 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14704 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14705 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14706 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14707 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14708 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14709 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14710 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14711 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14712 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14713 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14714 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14715 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14716 "thank","that","theme","then","theory","there","they","thing","this","thought",
14717 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14718 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14719 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14720 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14721 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14722 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14723 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14724 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14725 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14726 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14727 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14728 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14729 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14730 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14731 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14732 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14733 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14734 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14735 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14736 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14737 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14738 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14739 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14740 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14741 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14743 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14744 WORDLISTS["japanese"] = [
14745 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14746 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14747 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14748 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14749 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14750 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14751 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14752 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14753 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14754 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14755 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14756 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14757 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14758 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14759 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14760 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14761 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14762 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14763 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14764 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14765 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14766 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14767 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14768 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14769 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14770 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14771 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14772 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14773 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14774 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14775 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14776 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14777 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14778 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14779 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14780 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14781 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14782 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14783 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14784 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14785 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14786 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14787 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14788 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14789 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14790 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14791 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14792 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14793 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14794 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14795 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14796 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14797 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14798 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14799 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14800 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14801 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14802 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14803 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14804 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14805 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14806 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14807 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14808 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14809 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14810 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14811 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14812 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14813 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14814 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14815 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14816 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14817 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14818 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14819 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14820 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14821 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14822 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14823 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14824 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14825 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14826 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14827 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14828 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14829 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14830 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14831 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14832 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14833 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14834 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14835 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14836 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14837 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14838 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14839 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14840 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14841 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14842 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14843 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14844 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14845 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14846 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14847 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14848 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14849 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14850 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14851 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14852 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14853 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14854 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14855 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14856 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14857 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14858 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14859 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14860 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14861 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14862 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14863 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14864 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14865 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14866 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14867 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14868 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14869 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14870 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14871 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14872 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14873 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14874 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14875 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14876 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14877 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14878 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14879 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14880 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14881 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14882 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14883 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14884 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14885 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14886 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14887 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14888 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14889 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14890 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14891 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14892 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14893 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14894 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14895 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14896 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14897 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14898 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14899 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14900 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14901 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14902 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14903 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14904 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14905 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14906 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14907 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14908 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14909 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14910 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14911 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14912 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14913 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14914 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14915 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14916 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14917 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14918 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14919 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14920 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14921 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14922 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14923 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14924 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14925 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14926 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14927 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14928 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14929 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14930 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14931 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14932 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14933 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14934 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14935 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14936 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14937 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14938 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14939 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14940 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14941 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14942 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14943 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14944 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14945 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14946 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14947 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14948 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14949 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14951 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14952 WORDLISTS["spanish"] = [
14953 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14954 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14955 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14956 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14957 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14958 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14959 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14960 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14961 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14962 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14963 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14964 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14965 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14966 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14967 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14968 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14969 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14970 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14971 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14972 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14973 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14974 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14975 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14976 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14977 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14978 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14979 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14980 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14981 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14982 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14983 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14984 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14985 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14986 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14987 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14988 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14989 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14990 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14991 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14992 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14993 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14994 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14995 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14996 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14997 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14998 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14999 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
15000 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
15001 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
15002 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
15003 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
15004 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
15005 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
15006 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
15007 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
15008 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
15009 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
15010 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
15011 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
15012 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
15013 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
15014 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
15015 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
15016 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
15017 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
15018 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
15019 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
15020 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
15021 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
15022 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
15023 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
15024 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
15025 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
15026 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
15027 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
15028 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
15029 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
15030 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
15031 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
15032 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
15033 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
15034 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
15035 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
15036 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
15037 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
15038 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
15039 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
15040 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
15041 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
15042 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
15043 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
15044 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
15045 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
15046 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
15047 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
15048 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
15049 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
15050 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
15051 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15052 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15053 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15054 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15055 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15056 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15057 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15058 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15059 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15060 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15061 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15062 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15063 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15064 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15065 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15066 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15067 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15068 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15069 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15070 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15071 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15072 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15073 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15074 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15075 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15076 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15077 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15078 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15079 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15080 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15081 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15082 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15083 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15084 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15085 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15086 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15087 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15088 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15089 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15090 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15091 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15092 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15093 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15094 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15095 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15096 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15097 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15098 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15099 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15100 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15101 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15102 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15103 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15104 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15105 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15106 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15107 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15108 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15109 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15110 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15111 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15112 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15113 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15114 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15115 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15116 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15117 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15118 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15119 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15120 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15121 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15122 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15123 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15124 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15125 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15126 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15127 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15128 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15129 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15130 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15131 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15132 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15133 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15134 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15135 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15136 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15137 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15138 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15139 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15140 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15141 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15142 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15143 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15144 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15145 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15146 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15147 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15148 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15149 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15150 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15151 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15152 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15153 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15154 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15155 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15156 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15157 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15159 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15160 WORDLISTS["chinese_simplified"] = [
15161 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15162 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15163 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15164 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15165 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15166 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15167 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15168 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15169 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15170 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15171 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15172 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15173 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15174 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15175 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15176 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15177 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15178 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15179 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15180 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15181 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15182 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15183 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15184 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15185 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15186 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15187 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15188 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15189 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15190 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15191 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15192 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15193 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15194 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15195 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15196 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15197 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15198 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15199 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15200 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15201 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15202 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15203 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15204 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15205 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15206 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15207 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15208 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15209 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15210 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15211 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15212 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15213 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15214 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15215 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15216 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15217 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15218 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15219 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15220 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15221 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15222 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15223 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15224 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15225 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15226 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15227 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15228 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15229 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15230 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15231 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15232 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15233 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15234 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15235 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15236 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15237 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15238 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15239 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15240 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15241 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15242 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15243 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15244 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15245 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15246 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15247 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15248 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15249 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15250 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15251 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15252 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15253 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15254 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15255 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15256 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15257 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15258 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15259 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15260 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15261 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15262 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15263 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15264 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15265 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15266 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15267 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15268 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15269 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15270 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15271 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15272 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15273 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15274 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15275 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15276 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15277 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15278 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15279 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15280 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15281 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15282 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15283 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15284 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15285 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15286 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15287 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15288 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15289 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15290 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15291 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15292 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15293 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15294 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15295 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15296 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15297 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15298 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15299 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15300 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15301 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15302 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15303 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15304 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15305 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15306 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15307 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15308 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15309 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15310 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15311 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15312 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15313 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15314 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15315 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15316 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15317 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15318 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15319 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15320 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15321 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15322 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15323 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15324 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15325 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15326 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15327 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15328 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15329 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15330 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15331 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15332 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15333 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15334 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15335 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15336 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15337 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15338 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15339 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15340 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15341 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15342 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15343 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15344 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15345 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15346 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15347 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15348 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15349 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15350 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15351 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15352 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15353 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15354 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15355 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15356 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15357 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15358 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15359 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15360 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15361 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15362 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15363 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15364 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15365 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15367 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15368 WORDLISTS["chinese_traditional"] = [
15369 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15370 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15371 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15372 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15373 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15374 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15375 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15376 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15377 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15378 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15379 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15380 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15381 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15382 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15383 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15384 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15385 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15386 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15387 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15388 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15389 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15390 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15391 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15392 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15393 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15394 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15395 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15396 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15397 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15398 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15399 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15400 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15401 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15402 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15403 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15404 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15405 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15406 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15407 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15408 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15409 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15410 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15411 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15412 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15413 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15414 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15415 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15416 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15417 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15418 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15419 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15420 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15421 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15422 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15423 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15424 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15425 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15426 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15427 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15428 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15429 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15430 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15431 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15432 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15433 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15434 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15435 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15436 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15437 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15438 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15439 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15440 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15441 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15442 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15443 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15444 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15445 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15446 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15447 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15448 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15449 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15450 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15451 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15452 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15453 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15454 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15455 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15456 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15457 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15458 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15459 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15460 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15461 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15462 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15463 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15464 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15465 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15466 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15467 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15468 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15469 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15470 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15471 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15472 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15473 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15474 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15475 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15476 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15477 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15478 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15479 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15480 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15481 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15482 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15483 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15484 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15485 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15486 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15487 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15488 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15489 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15490 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15491 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15492 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15493 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15494 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15495 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15496 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15497 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15498 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15499 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15500 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15501 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15502 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15503 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15504 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15505 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15506 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15507 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15508 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15509 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15510 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15511 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15512 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15513 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15514 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15515 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15516 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15517 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15518 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15519 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15520 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15521 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15522 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15523 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15524 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15525 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15526 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15527 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15528 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15529 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15530 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15531 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15532 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15533 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15534 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15535 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15536 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15537 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15538 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15539 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15540 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15541 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15542 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15543 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15544 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15545 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15546 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15547 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15548 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15549 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15550 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15551 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15552 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15553 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15554 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15555 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15556 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15557 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15558 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15559 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15560 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15561 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15562 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15563 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15564 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15565 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15566 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15567 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15568 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15569 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15570 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15571 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15572 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15573 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15575 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15576 WORDLISTS["french"] = [
15577 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15578 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15579 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15580 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15581 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15582 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15583 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15584 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15585 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15586 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15587 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15588 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15589 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15590 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15591 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15592 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15593 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15594 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15595 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15596 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15597 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15598 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15599 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15600 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15601 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15602 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15603 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15604 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15605 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15606 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15607 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15608 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15609 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15610 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15611 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15612 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15613 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15614 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15615 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15616 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15617 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15618 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15619 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15620 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15621 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15622 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15623 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15624 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15625 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15626 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15627 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15628 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15629 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15630 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15631 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15632 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15633 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15634 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15635 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15636 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15637 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15638 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15639 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15640 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15641 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15642 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15643 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15644 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15645 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15646 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15647 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15648 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15649 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15650 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15651 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15652 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15653 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15654 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15655 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15656 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15657 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15658 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15659 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15660 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15661 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15662 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15663 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15664 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15665 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15666 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15667 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15668 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15669 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15670 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15671 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15672 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15673 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15674 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15675 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15676 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15677 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15678 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15679 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15680 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15681 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15682 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15683 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15684 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15685 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15686 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15687 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15688 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15689 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15690 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15691 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15692 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15693 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15694 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15695 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15696 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15697 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15698 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15699 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15700 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15701 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15702 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15703 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15704 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15705 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15706 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15707 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15708 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15709 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15710 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15711 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15712 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15713 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15714 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15715 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15716 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15717 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15718 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15719 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15720 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15721 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15722 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15723 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15724 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15725 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15726 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15727 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15728 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15729 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15730 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15731 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15732 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15733 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15734 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15735 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15736 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15737 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15738 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15739 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15740 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15741 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15742 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15743 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15744 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15745 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15746 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15747 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15748 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15749 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15750 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15751 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15752 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15753 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15754 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15755 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15756 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15757 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15758 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15759 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15760 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15761 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15762 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15763 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15764 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15765 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15766 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15767 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15768 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15769 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15770 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15771 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15772 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15773 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15774 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15775 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15776 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15777 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15778 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15779 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15780 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15781 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15783 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15784 WORDLISTS["italian"] = [
15785 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15786 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15787 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15788 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15789 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15790 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15791 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15792 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15793 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15794 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15795 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15796 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15797 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15798 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15799 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15800 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15801 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15802 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15803 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15804 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15805 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15806 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15807 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15808 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15809 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15810 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15811 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15812 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15813 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15814 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15815 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15816 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15817 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15818 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15819 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15820 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15821 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15822 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15823 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15824 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15825 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15826 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15827 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15828 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15829 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15830 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15831 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15832 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15833 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15834 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15835 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15836 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15837 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15838 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15839 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15840 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15841 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15842 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15843 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15844 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15845 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15846 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15847 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15848 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15849 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15850 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15851 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15852 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15853 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15854 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15855 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15856 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15857 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15858 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15859 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15860 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15861 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15862 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15863 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15864 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15865 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15866 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15867 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15868 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15869 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15870 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15871 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15872 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15873 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15874 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15875 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15876 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15877 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15878 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15879 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15880 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15881 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15882 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15883 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15884 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15885 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15886 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15887 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15888 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15889 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15890 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15891 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15892 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15893 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15894 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15895 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15896 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15897 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15898 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15899 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15900 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15901 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15902 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15903 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15904 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15905 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15906 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15907 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15908 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15909 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15910 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15911 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15912 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15913 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15914 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15915 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15916 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15917 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15918 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15919 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15920 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15921 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15922 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15923 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15924 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15925 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15926 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15927 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15928 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15929 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15930 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15931 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15932 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15933 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15934 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15935 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15936 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15937 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15938 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15939 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15940 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15941 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15942 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15943 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15944 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15945 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15946 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15947 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15948 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15949 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15950 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15951 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15952 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15953 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15954 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15955 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15956 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15957 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15958 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15959 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15960 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15961 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15962 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15963 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15964 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15965 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15966 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15967 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15968 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15969 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15970 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15971 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15972 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15973 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15974 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15975 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15976 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15977 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15978 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15979 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15980 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15981 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15982 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15983 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15984 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15985 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15986 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15987 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15988 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15989 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15992 * Copyright (c)
2013 Pavol Rusnak
15994 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15995 * this software and associated documentation files (the "Software"), to deal in
15996 * the Software without restriction, including without limitation the rights to
15997 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15998 * of the Software, and to permit persons to whom the Software is furnished to do
15999 * so, subject to the following conditions:
16001 * The above copyright notice and this permission notice shall be included in all
16002 * copies or substantial portions of the Software.
16004 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16005 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16006 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16007 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
16008 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16009 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16013 * Javascript port from python by Ian Coleman
16015 * Requires code from sjcl
16016 * https://github.com/bitwiseshiftleft/sjcl
16019 var Mnemonic = function(language) {
16021 var PBKDF2_ROUNDS =
2048;
16027 var hmacSHA512 = function(key) {
16028 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
16029 this.encrypt = function() {
16030 return hasher.encrypt.apply(hasher, arguments);
16035 wordlist = WORDLISTS[language];
16036 if (wordlist.length != RADIX) {
16037 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
16042 self.generate = function(strength) {
16043 strength = strength ||
128;
16044 var r = strength %
32;
16046 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
16048 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
16049 if (!hasStrongCrypto) {
16050 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16052 var buffer = new Uint8Array(strength /
8);
16053 var data = crypto.getRandomValues(buffer);
16054 return self.toMnemonic(data);
16057 self.toMnemonic = function(byteArray) {
16058 if (byteArray.length %
4 > 0) {
16059 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
16062 //h = hashlib.sha256(data).hexdigest()
16063 var data = byteArrayToWordArray(byteArray);
16064 var hash = sjcl.hash.sha256.hash(data);
16065 var h = sjcl.codec.hex.fromBits(hash);
16067 // b is a binary string, eg '
00111010101100...'
16068 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
16069 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
16071 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
16072 // c = bin(int(h,
16))[
2:].zfill(
256)
16073 // d = c[:len(data) *
8 /
32]
16074 var a = byteArrayToBinaryString(byteArray);
16075 var c = zfill(hexStringToBinaryString(h),
256);
16076 var d = c.substring(
0, byteArray.length *
8 /
32);
16077 // b = line1 + line2
16081 var blen = b.length /
11;
16082 for (var i=
0; i
<blen; i++) {
16083 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
16084 result.push(wordlist[idx]);
16086 return self.joinWords(result);
16089 self.check = function(mnemonic) {
16090 var mnemonic = self.splitWords(mnemonic);
16091 if (mnemonic.length %
3 > 0) {
16094 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
16096 for (var i=
0; i
<mnemonic.length; i++) {
16097 var word = mnemonic[i];
16098 var wordIndex = wordlist.indexOf(word);
16099 if (wordIndex == -
1) {
16102 var binaryIndex = zfill(wordIndex.toString(
2),
11);
16103 idx.push(binaryIndex);
16105 var b = idx.join('');
16107 //d = b[:l /
33 *
32]
16109 var d = b.substring(
0, l /
33 *
32);
16110 var h = b.substring(l - l /
33, l);
16111 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
16112 var nd = binaryStringToWordArray(d);
16113 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
16114 var ndHash = sjcl.hash.sha256.hash(nd);
16115 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16116 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
16117 var nh = ndBstr.substring(
0,l/
33);
16121 self.toSeed = function(mnemonic, passphrase) {
16122 passphrase = passphrase || '';
16123 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16124 passphrase = self.normalizeString(passphrase)
16125 passphrase =
"mnemonic" + passphrase;
16126 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16127 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16128 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
16129 var hashHex = sjcl.codec.hex.fromBits(result);
16133 self.splitWords = function(mnemonic) {
16134 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16137 self.joinWords = function(words) {
16138 // Set space correctly depending on the language
16139 // see https://github.com/bitcoin/bips/blob/master/bip-
0039/bip-
0039-wordlists.md#japanese
16141 if (language ==
"japanese") {
16142 space =
"\u3000"; // ideographic space
16144 return words.join(space);
16147 self.normalizeString = function(str) {
16148 if (typeof str.normalize ==
"function") {
16149 return str.normalize(
"NFKD");
16152 // TODO decide how to handle this in the future.
16153 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16158 function byteArrayToWordArray(data) {
16160 for (var i=
0; i
<data.length/
4; i++) {
16162 v += data[i*
4 +
0] <<
8 *
3;
16163 v += data[i*
4 +
1] <<
8 *
2;
16164 v += data[i*
4 +
2] <<
8 *
1;
16165 v += data[i*
4 +
3] <<
8 *
0;
16171 function byteArrayToBinaryString(data) {
16173 for (var i=
0; i
<data.length; i++) {
16174 bin += zfill(data[i].toString(
2),
8);
16179 function hexStringToBinaryString(hexString) {
16181 for (var i=
0; i
<hexString.length; i++) {
16182 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
16184 return binaryString;
16187 function binaryStringToWordArray(binary) {
16188 var aLen = binary.length /
32;
16190 for (var i=
0; i
<aLen; i++) {
16191 var valueStr = binary.substring(
0,
32);
16192 var value = parseInt(valueStr,
2);
16194 binary = binary.slice(
32);
16199 // Pad a numeric string on the left with zero digits until the given width
16201 // Note this differs to the python implementation because it does not
16202 // handle numbers starting with a sign.
16203 function zfill(source, length) {
16204 source = source.toString();
16205 while (source.length < length) {
16206 source = '
0' + source;
16215 <script>window.Entropy = new (function() {
16220 dice: /[
1-
6]/gi, // ie dice numbers
16225 this.fromString = function(rawEntropyStr) {
16226 // Find type of entropy being used (binary, hex, dice etc)
16227 var base = getBase(rawEntropyStr);
16228 // Convert dice to base6 entropy (ie
1-
6 to
0-
5)
16229 if (base.str == "dice") {
16230 var newRawEntropyStr = "";
16231 for (var i=
0; i
<rawEntropyStr.length; i++) {
16232 var c = rawEntropyStr[i];
16233 if (
"123456".indexOf(c)
> -
1) {
16234 newRawEntropyStr += (parseInt(c) -
1).toString();
16237 newRawEntropyStr += c
16240 rawEntropyStr = newRawEntropyStr;
16241 base.str = "base
6 (dice)";
16242 base.matcher = matchers.base6;
16244 var entropyParts = rawEntropyStr.match(base.matcher) || [];
16245 var entropyStr = entropyParts.join("");
16246 // Detect empty entropy
16247 if (entropyStr.length ==
0) {
16255 // Pull leading zeros off
16256 var leadingZeros = "";
16257 while (entropyStr[
0] == "
0") {
16258 leadingZeros += "
0";
16259 entropyStr = entropyStr.substring(
1);
16261 // Convert leading zeros to binary equivalent
16262 var numBinLeadingZeros = Math.ceil(Math.log2(base.asInt) * leadingZeros.length);
16263 var binLeadingZeros = "";
16264 for (var i=
0; i
<numBinLeadingZeros; i++) {
16265 binLeadingZeros +=
"0";
16267 // Convert leading zeros to hex equivalent
16268 var numHexLeadingZeros = Math.floor(numBinLeadingZeros /
4);
16269 var hexLeadingZeros =
"";
16270 for (var i=
0; i
<numHexLeadingZeros; i++) {
16271 hexLeadingZeros +=
"0";
16273 // Handle entropy of zero
16274 if (entropyStr ==
"") {
16276 binaryStr: binLeadingZeros,
16277 hexStr: hexLeadingZeros ||
"0",
16278 cleanStr: leadingZeros,
16282 // If using hex, should always be multiples of
4 bits, which can get
16283 // out of sync if first number has leading
0 bits, eg
2 in hex is
0010
16284 // which would show up as
10, thus missing
2 bits it should have.
16285 if (base.asInt ==
16) {
16286 var firstDigit = parseInt(entropyStr[
0],
16);
16287 if (firstDigit
>=
4 && firstDigit <
8) {
16288 binLeadingZeros += "
0";
16290 else if (firstDigit
>=
2 && firstDigit <
4) {
16291 binLeadingZeros += "
00";
16293 else if (firstDigit
>=
1 && firstDigit <
2) {
16294 binLeadingZeros += "
000";
16297 // Convert entropy to different foramts
16298 var entropyInt = BigInteger.parse(entropyStr, base.asInt);
16299 var entropyBin = binLeadingZeros + entropyInt.toString(
2);
16300 var entropyHex = hexLeadingZeros + entropyInt.toString(
16);
16301 var entropyClean = leadingZeros + entropyStr;
16303 binaryStr: entropyBin,
16304 hexStr: entropyHex,
16305 cleanStr: entropyClean,
16311 function getBase(str) {
16312 // Need to get the lowest base for the supplied entropy.
16313 // This prevents interpreting, say, dice rolls as hexadecimal.
16314 var binaryMatches = str.match(matchers.binary) || [];
16315 var base6Matches = str.match(matchers.base6) || [];
16316 var diceMatches = str.match(matchers.dice) || [];
16317 var base10Matches = str.match(matchers.base10) || [];
16318 var hexMatches = str.match(matchers.hex) || [];
16319 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
16320 if (binaryMatches.length == hexMatches.length) {
16322 matcher: matchers.binary,
16327 if (diceMatches.length == hexMatches.length) {
16329 matcher: matchers.dice,
16334 if (base6Matches.length == hexMatches.length) {
16336 matcher: matchers.base6,
16341 if (base10Matches.length == hexMatches.length) {
16343 matcher: matchers.base10,
16349 matcher: matchers.hex,
16351 str: "hexadecimal",
16355 // Polyfill for Math.log2
16356 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
16357 Math.log2 = Math.log2 || function(x) {
16358 return Math.log(x) * Math.LOG2E;
16364 // BigInteger library included here because
16365 // only the entropy library depends on it
16366 // so if entropy detection is removed so is the dependency
16370 JavaScript BigInteger library version
0.9.1
16371 http://silentmatt.com/biginteger/
16373 Copyright (c)
2009 Matthew Crumley
<email@matthewcrumley.com
>
16374 Copyright (c)
2010,
2011 by John Tobey
<John.Tobey@gmail.com
>
16375 Licensed under the MIT license.
16377 Support for arbitrary internal representation base was added by
16382 File: biginteger.js
16388 (function(exports) {
16392 An arbitrarily-large integer.
16394 <BigInteger> objects should be considered immutable. None of the "built-in"
16395 methods modify *this* or their arguments. All properties should be
16396 considered private.
16398 All the methods of
<BigInteger> instances can be called "statically". The
16399 static versions are convenient if you don't already have a
<BigInteger>
16402 As an example, these calls are equivalent.
16404 > BigInteger(
4).multiply(
5); // returns BigInteger(
20);
16405 > BigInteger.multiply(
4,
5); // returns BigInteger(
20);
16408 > var a = BigInteger.toJSValue("
0b101010"); // Not completely useless...
16411 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
16414 Constructor: BigInteger()
16415 Convert a value to a
<BigInteger>.
16417 Although
<BigInteger()
> is the constructor for
<BigInteger> objects, it is
16418 best not to call it as a constructor. If *n* is a
<BigInteger> object, it is
16419 simply returned as-is. Otherwise,
<BigInteger()
> is equivalent to
<parse>
16420 without a radix argument.
16422 > var n0 = BigInteger(); // Same as
<BigInteger.ZERO
>
16423 > var n1 = BigInteger("
123"); // Create a new
<BigInteger> with value
123
16424 > var n2 = BigInteger(
123); // Create a new
<BigInteger> with value
123
16425 > var n3 = BigInteger(n2); // Return n2, unchanged
16427 The constructor form only takes an array and a sign. *n* must be an
16428 array of numbers in little-endian order, where each digit is between
0
16429 and BigInteger.base. The second parameter sets the sign: -
1 for
16430 negative, +
1 for positive, or
0 for zero. The array is *not copied and
16431 may be modified*. If the array contains only zeros, the sign parameter
16432 is ignored and is forced to zero.
16434 > new BigInteger([
5], -
1): create a new BigInteger with value -
5
16438 n - Value to convert to a
<BigInteger>.
16442 A
<BigInteger> value.
16446 <parse>,
<BigInteger>
16448 function BigInteger(n, s, token) {
16449 if (token !== CONSTRUCT) {
16450 if (n instanceof BigInteger) {
16453 else if (typeof n === "undefined") {
16456 return BigInteger.parse(n);
16459 n = n || []; // Provide the nullary constructor for subclasses.
16460 while (n.length && !n[n.length -
1]) {
16464 this._s = n.length ? (s ||
1) :
0;
16467 BigInteger._construct = function(n, s) {
16468 return new BigInteger(n, s, CONSTRUCT);
16471 // Base-
10 speedup hacks in parse, toString, exp10 and log functions
16472 // require base to be a power of
10.
10^
7 is the largest such power
16473 // that won't cause a precision loss when digits are multiplied.
16474 var BigInteger_base =
10000000;
16475 var BigInteger_base_log10 =
7;
16477 BigInteger.base = BigInteger_base;
16478 BigInteger.base_log10 = BigInteger_base_log10;
16480 var ZERO = new BigInteger([],
0, CONSTRUCT);
16483 BigInteger.ZERO = ZERO;
16485 var ONE = new BigInteger([
1],
1, CONSTRUCT);
16488 BigInteger.ONE = ONE;
16490 var M_ONE = new BigInteger(ONE._d, -
1, CONSTRUCT);
16492 //
<BigInteger> -
1.
16493 BigInteger.M_ONE = M_ONE;
16496 // Shortcut for
<ZERO>.
16497 BigInteger._0 = ZERO;
16500 // Shortcut for
<ONE>.
16501 BigInteger._1 = ONE;
16505 Array of
<BigIntegers> from
0 to
36.
16507 These are used internally for parsing, but useful when you need a "small"
16512 <ZERO>,
<ONE>,
<_0>,
<_1>
16514 BigInteger.small = [
16517 /* Assuming BigInteger_base
> 36 */
16518 new BigInteger( [
2],
1, CONSTRUCT),
16519 new BigInteger( [
3],
1, CONSTRUCT),
16520 new BigInteger( [
4],
1, CONSTRUCT),
16521 new BigInteger( [
5],
1, CONSTRUCT),
16522 new BigInteger( [
6],
1, CONSTRUCT),
16523 new BigInteger( [
7],
1, CONSTRUCT),
16524 new BigInteger( [
8],
1, CONSTRUCT),
16525 new BigInteger( [
9],
1, CONSTRUCT),
16526 new BigInteger([
10],
1, CONSTRUCT),
16527 new BigInteger([
11],
1, CONSTRUCT),
16528 new BigInteger([
12],
1, CONSTRUCT),
16529 new BigInteger([
13],
1, CONSTRUCT),
16530 new BigInteger([
14],
1, CONSTRUCT),
16531 new BigInteger([
15],
1, CONSTRUCT),
16532 new BigInteger([
16],
1, CONSTRUCT),
16533 new BigInteger([
17],
1, CONSTRUCT),
16534 new BigInteger([
18],
1, CONSTRUCT),
16535 new BigInteger([
19],
1, CONSTRUCT),
16536 new BigInteger([
20],
1, CONSTRUCT),
16537 new BigInteger([
21],
1, CONSTRUCT),
16538 new BigInteger([
22],
1, CONSTRUCT),
16539 new BigInteger([
23],
1, CONSTRUCT),
16540 new BigInteger([
24],
1, CONSTRUCT),
16541 new BigInteger([
25],
1, CONSTRUCT),
16542 new BigInteger([
26],
1, CONSTRUCT),
16543 new BigInteger([
27],
1, CONSTRUCT),
16544 new BigInteger([
28],
1, CONSTRUCT),
16545 new BigInteger([
29],
1, CONSTRUCT),
16546 new BigInteger([
30],
1, CONSTRUCT),
16547 new BigInteger([
31],
1, CONSTRUCT),
16548 new BigInteger([
32],
1, CONSTRUCT),
16549 new BigInteger([
33],
1, CONSTRUCT),
16550 new BigInteger([
34],
1, CONSTRUCT),
16551 new BigInteger([
35],
1, CONSTRUCT),
16552 new BigInteger([
36],
1, CONSTRUCT)
16555 // Used for parsing/radix conversion
16556 BigInteger.digits =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(
"");
16560 Convert a
<BigInteger> to a string.
16562 When *base* is greater than
10, letters are upper case.
16566 base - Optional base to represent the number in (default is base
10).
16567 Must be between
2 and
36 inclusive, or an Error will be thrown.
16571 The string representation of the
<BigInteger>.
16573 BigInteger.prototype.toString = function(base) {
16574 base = +base ||
10;
16575 if (base <
2 || base
> 36) {
16576 throw new Error(
"illegal radix " + base +
".");
16578 if (this._s ===
0) {
16582 var str = this._s <
0 ?
"-" :
"";
16583 str += this._d[this._d.length -
1].toString();
16584 for (var i = this._d.length -
2; i
>=
0; i--) {
16585 var group = this._d[i].toString();
16586 while (group.length < BigInteger_base_log10) group = '
0' + group;
16592 var numerals = BigInteger.digits;
16593 base = BigInteger.small[base];
16594 var sign = this._s;
16596 var n = this.abs();
16600 while (n._s !==
0) {
16601 var divmod = n.divRem(base);
16604 // TODO: This could be changed to unshift instead of reversing at the end.
16605 // Benchmark both to compare speeds.
16606 digits.push(numerals[digit.valueOf()]);
16608 return (sign <
0 ? "-" : "") + digits.reverse().join("");
16612 // Verify strings for parsing
16613 BigInteger.radixRegex = [
16655 Parse a string into a
<BigInteger>.
16657 *base* is optional but, if provided, must be from
2 to
36 inclusive. If
16658 *base* is not provided, it will be guessed based on the leading characters
16661 - "
0x" or "
0X": *base* =
16
16662 - "
0c" or "
0C": *base* =
8
16663 - "
0b" or "
0B": *base* =
2
16664 - else: *base* =
10
16666 If no base is provided, or *base* is
10, the number can be in exponential
16667 form. For example, these are all valid:
16669 > BigInteger.parse("
1e9"); // Same as "
1000000000"
16670 > BigInteger.parse("
1.234*
10^
3"); // Same as
1234
16671 > BigInteger.parse("
56789 *
10 ** -
2"); // Same as
567
16673 If any characters fall outside the range defined by the radix, an exception
16678 s - The string to parse.
16679 base - Optional radix (default is to guess based on *s*).
16683 a
<BigInteger> instance.
16685 BigInteger.parse = function(s, base) {
16686 // Expands a number in exponential form to decimal form.
16687 // expandExponential("-
13.441*
10^
5") === "
1344100";
16688 // expandExponential("
1.12300e-1") === "
0.112300";
16689 // expandExponential(
1000000000000000000000000000000) === "
1000000000000000000000000000000";
16690 function expandExponential(str) {
16691 str = str.replace(/\s*[*xX]\s*
10\s*(\^|\*\*)\s*/, "e");
16693 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
16696 var i = n.length + c;
16697 x = (l ? n : f).length;
16698 c = ((c = Math.abs(c))
>= x ? c - x + l :
0);
16699 var z = (new Array(c +
1)).join("
0");
16701 return (s || "") + (l ? r = z + r : r += z).substr(
0, i += l ? z.length :
0) + (i < r.length ? "." + r.substr(i) : "");
16706 if (typeof base === "undefined" || +base ===
10) {
16707 s = expandExponential(s);
16711 if (typeof base === "undefined") {
16712 prefixRE = '
0[xcb]';
16714 else if (base ==
16) {
16717 else if (base ==
8) {
16720 else if (base ==
2) {
16726 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([
0-
9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
16728 var sign = parts[
1] || "+";
16729 var baseSection = parts[
2] || "";
16730 var digits = parts[
3] || "";
16732 if (typeof base === "undefined") {
16734 if (baseSection === "
0x" || baseSection === "
0X") { // Hex
16737 else if (baseSection === "
0c" || baseSection === "
0C") { // Octal
16740 else if (baseSection === "
0b" || baseSection === "
0B") { // Binary
16747 else if (base <
2 || base
> 36) {
16748 throw new Error(
"Illegal radix " + base +
".");
16753 // Check for digits outside the range
16754 if (!(BigInteger.radixRegex[base].test(digits))) {
16755 throw new Error(
"Bad digit for radix " + base);
16758 // Strip leading zeros, and convert to array
16759 digits = digits.replace(/^
0+/,
"").split(
"");
16760 if (digits.length ===
0) {
16764 // Get the sign (we know it's not zero)
16765 sign = (sign ===
"-") ? -
1 :
1;
16770 while (digits.length
>= BigInteger_base_log10) {
16771 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''),
10));
16773 d.push(parseInt(digits.join(''),
10));
16774 return new BigInteger(d, sign, CONSTRUCT);
16777 // Do the conversion
16779 base = BigInteger.small[base];
16780 var small = BigInteger.small;
16781 for (var i =
0; i < digits.length; i++) {
16782 d = d.multiply(base).add(small[parseInt(digits[i],
36)]);
16784 return new BigInteger(d._d, sign, CONSTRUCT);
16787 throw new Error("Invalid BigInteger format: " + s);
16793 Add two
<BigIntegers>.
16797 n - The number to add to *this*. Will be converted to a
<BigInteger>.
16801 The numbers added together.
16805 <subtract>,
<multiply>,
<quotient>,
<next>
16807 BigInteger.prototype.add = function(n) {
16808 if (this._s ===
0) {
16809 return BigInteger(n);
16816 if (this._s !== n._s) {
16818 return this.subtract(n);
16825 var sum = new Array(Math.max(al, bl) +
1);
16826 var size = Math.min(al, bl);
16830 for (var i =
0; i < size; i++) {
16831 digit = a[i] + b[i] + carry;
16832 sum[i] = digit % BigInteger_base;
16833 carry = (digit / BigInteger_base) |
0;
16839 for (i = size; carry && i < al; i++) {
16840 digit = a[i] + carry;
16841 sum[i] = digit % BigInteger_base;
16842 carry = (digit / BigInteger_base) |
0;
16848 for ( ; i < al; i++) {
16852 return new BigInteger(sum, this._s, CONSTRUCT);
16857 Get the additive inverse of a
<BigInteger>.
16861 A
<BigInteger> with the same magnatude, but with the opposite sign.
16867 BigInteger.prototype.negate = function() {
16868 return new BigInteger(this._d, (-this._s) |
0, CONSTRUCT);
16873 Get the absolute value of a
<BigInteger>.
16877 A
<BigInteger> with the same magnatude, but always positive (or zero).
16883 BigInteger.prototype.abs = function() {
16884 return (this._s <
0) ? this.negate() : this;
16889 Subtract two
<BigIntegers>.
16893 n - The number to subtract from *this*. Will be converted to a
<BigInteger>.
16897 The *n* subtracted from *this*.
16901 <add>,
<multiply>,
<quotient>,
<prev>
16903 BigInteger.prototype.subtract = function(n) {
16904 if (this._s ===
0) {
16905 return BigInteger(n).negate();
16912 if (this._s !== n._s) {
16914 return this.add(n);
16918 // negative - negative =
> -|a| - -|b| =
> -|a| + |b| =
> |b| - |a|
16920 m = new BigInteger(n._d,
1, CONSTRUCT);
16921 n = new BigInteger(this._d,
1, CONSTRUCT);
16924 // Both are positive =
> a - b
16925 var sign = m.compareAbs(n);
16929 else if (sign <
0) {
16941 var diff = new Array(al); // al
>= bl since a
> b
16946 for (i =
0; i < bl; i++) {
16947 digit = a[i] - borrow - b[i];
16949 digit += BigInteger_base;
16957 for (i = bl; i < al; i++) {
16958 digit = a[i] - borrow;
16960 digit += BigInteger_base;
16968 for ( ; i < al; i++) {
16972 return new BigInteger(diff, sign, CONSTRUCT);
16976 function addOne(n, sign) {
16978 var sum = a.slice();
16983 var digit = (a[i] ||
0) +
1;
16984 sum[i] = digit % BigInteger_base;
16985 if (digit <= BigInteger_base -
1) {
16991 return new BigInteger(sum, sign, CONSTRUCT);
16994 function subtractOne(n, sign) {
16996 var sum = a.slice();
17001 var digit = (a[i] ||
0) -
1;
17003 sum[i] = digit + BigInteger_base;
17012 return new BigInteger(sum, sign, CONSTRUCT);
17017 Get the next
<BigInteger> (add one).
17027 BigInteger.prototype.next = function() {
17032 return subtractOne(this, -
1);
17035 return addOne(this,
1);
17041 Get the previous
<BigInteger> (subtract one).
17051 BigInteger.prototype.prev = function() {
17056 return addOne(this, -
1);
17059 return subtractOne(this,
1);
17065 Function: compareAbs
17066 Compare the absolute value of two
<BigIntegers>.
17068 Calling
<compareAbs> is faster than calling
<abs> twice, then
<compare>.
17072 n - The number to compare to *this*. Will be converted to a
<BigInteger>.
17076 -
1,
0, or +
1 if *|this|* is less than, equal to, or greater than *|n|*.
17082 BigInteger.prototype.compareAbs = function(n) {
17087 if (!(n instanceof BigInteger)) {
17088 if (!isFinite(n)) {
17089 return(isNaN(n) ? n : -
1);
17094 if (this._s ===
0) {
17095 return (n._s !==
0) ? -
1 :
0;
17101 var l = this._d.length;
17102 var nl = n._d.length;
17112 for (var i = l-
1; i
>=
0; i--) {
17113 if (a[i] !== b[i]) {
17114 return a[i] < b[i] ? -
1 :
1;
17123 Compare two
<BigIntegers>.
17127 n - The number to compare to *this*. Will be converted to a
<BigInteger>.
17131 -
1,
0, or +
1 if *this* is less than, equal to, or greater than *n*.
17135 <compareAbs>,
<isPositive>,
<isNegative>,
<isUnit>
17137 BigInteger.prototype.compare = function(n) {
17144 if (this._s ===
0) {
17148 if (this._s === n._s) { // both positive or both negative
17149 var cmp = this.compareAbs(n);
17150 return cmp * this._s;
17159 Return true iff *this* is either
1 or -
1.
17163 true if *this* compares equal to
<BigInteger.ONE
> or
<BigInteger.M_ONE
>.
17167 <isZero>,
<isNegative>,
<isPositive>,
<compareAbs>,
<compare>,
17168 <BigInteger.ONE
>,
<BigInteger.M_ONE
>
17170 BigInteger.prototype.isUnit = function() {
17171 return this === ONE ||
17173 (this._d.length ===
1 && this._d[
0] ===
1);
17178 Multiply two
<BigIntegers>.
17182 n - The number to multiply *this* by. Will be converted to a
17187 The numbers multiplied together.
17191 <add>,
<subtract>,
<quotient>,
<square>
17193 BigInteger.prototype.multiply = function(n) {
17194 // TODO: Consider adding Karatsuba multiplication for large numbers
17195 if (this._s ===
0) {
17203 if (this.isUnit()) {
17211 return this.negate();
17216 return this.square();
17219 var r = (this._d.length
>= n._d.length);
17220 var a = (r ? this : n)._d; // a will be longer than b
17221 var b = (r ? n : this)._d;
17226 var partial = new Array(pl);
17228 for (i =
0; i < pl; i++) {
17232 for (i =
0; i < bl; i++) {
17235 var jlimit = al + i;
17237 for (var j = i; j < jlimit; j++) {
17238 digit = partial[j] + bi * a[j - i] + carry;
17239 carry = (digit / BigInteger_base) |
0;
17240 partial[j] = (digit % BigInteger_base) |
0;
17243 digit = partial[j] + carry;
17244 carry = (digit / BigInteger_base) |
0;
17245 partial[j] = digit % BigInteger_base;
17248 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
17251 // Multiply a BigInteger by a single-digit native number
17252 // Assumes that this and n are
>=
0
17253 // This is not really intended to be used outside the library itself
17254 BigInteger.prototype.multiplySingleDigit = function(n) {
17255 if (n ===
0 || this._s ===
0) {
17263 if (this._d.length ===
1) {
17264 digit = this._d[
0] * n;
17265 if (digit
>= BigInteger_base) {
17266 return new BigInteger([(digit % BigInteger_base)|
0,
17267 (digit / BigInteger_base)|
0],
1, CONSTRUCT);
17269 return new BigInteger([digit],
1, CONSTRUCT);
17273 return this.add(this);
17275 if (this.isUnit()) {
17276 return new BigInteger([n],
1, CONSTRUCT);
17283 var partial = new Array(pl);
17284 for (var i =
0; i < pl; i++) {
17289 for (var j =
0; j < al; j++) {
17290 digit = n * a[j] + carry;
17291 carry = (digit / BigInteger_base) |
0;
17292 partial[j] = (digit % BigInteger_base) |
0;
17295 partial[j] = carry;
17298 return new BigInteger(partial,
1, CONSTRUCT);
17303 Multiply a
<BigInteger> by itself.
17305 This is slightly faster than regular multiplication, since it removes the
17306 duplicated multiplcations.
17310 > this.multiply(this)
17315 BigInteger.prototype.square = function() {
17316 // Normally, squaring a
10-digit number would take
100 multiplications.
17317 // Of these
10 are unique diagonals, of the remaining
90 (
100-
10),
45 are repeated.
17318 // This procedure saves (N*(N-
1))/
2 multiplications, (e.g.,
45 of
100 multiplies).
17319 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
17321 if (this._s ===
0) {
17324 if (this.isUnit()) {
17328 var digits = this._d;
17329 var length = digits.length;
17330 var imult1 = new Array(length + length +
1);
17331 var product, carry, k;
17334 // Calculate diagonal
17335 for (i =
0; i < length; i++) {
17337 product = digits[i] * digits[i];
17338 carry = (product / BigInteger_base) |
0;
17339 imult1[k] = product % BigInteger_base;
17340 imult1[k +
1] = carry;
17343 // Calculate repeating part
17344 for (i =
0; i < length; i++) {
17347 for (var j = i +
1; j < length; j++, k++) {
17348 product = digits[j] * digits[i] *
2 + imult1[k] + carry;
17349 carry = (product / BigInteger_base) |
0;
17350 imult1[k] = product % BigInteger_base;
17353 var digit = carry + imult1[k];
17354 carry = (digit / BigInteger_base) |
0;
17355 imult1[k] = digit % BigInteger_base;
17356 imult1[k +
1] += carry;
17359 return new BigInteger(imult1,
1, CONSTRUCT);
17364 Divide two
<BigIntegers> and truncate towards zero.
17366 <quotient> throws an exception if *n* is zero.
17370 n - The number to divide *this* by. Will be converted to a
<BigInteger>.
17374 The *this* / *n*, truncated to an integer.
17378 <add>,
<subtract>,
<multiply>,
<divRem>,
<remainder>
17380 BigInteger.prototype.quotient = function(n) {
17381 return this.divRem(n)[
0];
17386 Deprecated synonym for
<quotient>.
17388 BigInteger.prototype.divide = BigInteger.prototype.quotient;
17391 Function: remainder
17392 Calculate the remainder of two
<BigIntegers>.
17394 <remainder> throws an exception if *n* is zero.
17398 n - The remainder after *this* is divided *this* by *n*. Will be
17399 converted to a
<BigInteger>.
17407 <divRem>,
<quotient>
17409 BigInteger.prototype.remainder = function(n) {
17410 return this.divRem(n)[
1];
17415 Calculate the integer quotient and remainder of two
<BigIntegers>.
17417 <divRem> throws an exception if *n* is zero.
17421 n - The number to divide *this* by. Will be converted to a
<BigInteger>.
17425 A two-element array containing the quotient and the remainder.
17429 is exactly equivalent to
17431 > [a.quotient(b), a.remainder(b)]
17433 except it is faster, because they are calculated at the same time.
17437 <quotient>,
<remainder>
17439 BigInteger.prototype.divRem = function(n) {
17442 throw new Error("Divide by zero");
17444 if (this._s ===
0) {
17445 return [ZERO, ZERO];
17447 if (n._d.length ===
1) {
17448 return this.divRemSmall(n._s * n._d[
0]);
17451 // Test for easy cases -- |n1| <= |n2|
17452 switch (this.compareAbs(n)) {
17453 case
0: // n1 == n2
17454 return [this._s === n._s ? ONE : M_ONE, ZERO];
17455 case -
1: // |n1| < |n2|
17456 return [ZERO, this];
17459 var sign = this._s * n._s;
17461 var b_digits = this._d;
17462 var b_index = b_digits.length;
17463 var digits = n._d.length;
17467 var part = new BigInteger([],
0, CONSTRUCT);
17470 part._d.unshift(b_digits[--b_index]);
17471 part = new BigInteger(part._d,
1, CONSTRUCT);
17473 if (part.compareAbs(n) <
0) {
17477 if (part._s ===
0) {
17481 var xlen = part._d.length, ylen = a._d.length;
17482 var highx = part._d[xlen-
1]*BigInteger_base + part._d[xlen-
2];
17483 var highy = a._d[ylen-
1]*BigInteger_base + a._d[ylen-
2];
17484 if (part._d.length
> a._d.length) {
17485 // The length of part._d can either match a._d length,
17486 // or exceed it by one.
17487 highx = (highx+
1)*BigInteger_base;
17489 guess = Math.ceil(highx/highy);
17492 var check = a.multiplySingleDigit(guess);
17493 if (check.compareAbs(part) <=
0) {
17503 var diff = part.subtract(check);
17504 part._d = diff._d.slice();
17507 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
17508 new BigInteger(part._d, this._s, CONSTRUCT)];
17511 // Throws an exception if n is outside of (-BigInteger.base, -
1] or
17512 // [
1, BigInteger.base). It's not necessary to call this, since the
17513 // other division functions will call it if they are able to.
17514 BigInteger.prototype.divRemSmall = function(n) {
17518 throw new Error("Divide by zero");
17521 var n_s = n <
0 ? -
1 :
1;
17522 var sign = this._s * n_s;
17525 if (n <
1 || n
>= BigInteger_base) {
17526 throw new Error("Argument out of range");
17529 if (this._s ===
0) {
17530 return [ZERO, ZERO];
17533 if (n ===
1 || n === -
1) {
17534 return [(sign ===
1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
17537 //
2 <= n < BigInteger_base
17539 // divide a single digit by a single digit
17540 if (this._d.length ===
1) {
17541 var q = new BigInteger([(this._d[
0] / n) |
0],
1, CONSTRUCT);
17542 r = new BigInteger([(this._d[
0] % n) |
0],
1, CONSTRUCT);
17552 var digits = this._d.slice();
17553 var quot = new Array(digits.length);
17559 while (digits.length) {
17560 part = part * BigInteger_base + digits[digits.length -
1];
17564 diff = BigInteger_base * diff + part;
17571 guess = (part / n) |
0;
17574 var check = n * guess;
17575 diff = part - check;
17586 r = new BigInteger([diff],
1, CONSTRUCT);
17590 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
17595 Return true iff *this* is divisible by two.
17597 Note that
<BigInteger.ZERO
> is even.
17601 true if *this* is even, false otherwise.
17607 BigInteger.prototype.isEven = function() {
17608 var digits = this._d;
17609 return this._s ===
0 || digits.length ===
0 || (digits[
0] %
2) ===
0;
17614 Return true iff *this* is not divisible by two.
17618 true if *this* is odd, false otherwise.
17624 BigInteger.prototype.isOdd = function() {
17625 return !this.isEven();
17630 Get the sign of a
<BigInteger>.
17640 <isZero>,
<isPositive>,
<isNegative>,
<compare>,
<BigInteger.ZERO
>
17642 BigInteger.prototype.sign = function() {
17647 Function: isPositive
17648 Return true iff *this*
> 0.
17652 true if *this*.compare(
<BigInteger.ZERO
>) ==
1.
17656 <sign>,
<isZero>,
<isNegative>,
<isUnit>,
<compare>,
<BigInteger.ZERO
>
17658 BigInteger.prototype.isPositive = function() {
17659 return this._s
> 0;
17663 Function: isNegative
17664 Return true iff *this* <
0.
17668 true if *this*.compare(
<BigInteger.ZERO
>) == -
1.
17672 <sign>,
<isPositive>,
<isZero>,
<isUnit>,
<compare>,
<BigInteger.ZERO
>
17674 BigInteger.prototype.isNegative = function() {
17675 return this._s <
0;
17680 Return true iff *this* ==
0.
17684 true if *this*.compare(
<BigInteger.ZERO
>) ==
0.
17688 <sign>,
<isPositive>,
<isNegative>,
<isUnit>,
<BigInteger.ZERO
>
17690 BigInteger.prototype.isZero = function() {
17691 return this._s ===
0;
17696 Multiply a
<BigInteger> by a power of
10.
17698 This is equivalent to, but faster than
17701 > return this.multiply(BigInteger("
1e" + n));
17704 > return this.quotient(BigInteger("
1e" + -n));
17709 n - The power of
10 to multiply *this* by. *n* is converted to a
17710 javascipt number and must be no greater than
<BigInteger.MAX_EXP
>
17711 (
0x7FFFFFFF), or an exception will be thrown.
17715 *this* * (
10 ** *n*), truncated to an integer if necessary.
17721 BigInteger.prototype.exp10 = function(n) {
17726 if (Math.abs(n)
> Number(MAX_EXP)) {
17727 throw new Error("exponent too large in BigInteger.exp10");
17729 // Optimization for this ==
0. This also keeps us from having to trim zeros in the positive n case
17730 if (this._s ===
0) {
17734 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
17736 for (; n
>= BigInteger_base_log10; n -= BigInteger_base_log10) {
17742 k = k.multiplySingleDigit(Math.pow(
10, n));
17743 return (this._s <
0 ? k.negate() : k);
17744 } else if (-n
>= this._d.length*BigInteger_base_log10) {
17747 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
17749 for (n = -n; n
>= BigInteger_base_log10; n -= BigInteger_base_log10) {
17752 return (n ==
0) ? k : k.divRemSmall(Math.pow(
10, n))[
0];
17758 Raise a
<BigInteger> to a power.
17760 In this implementation,
0**
0 is
1.
17764 n - The exponent to raise *this* by. *n* must be no greater than
17765 <BigInteger.MAX_EXP
> (
0x7FFFFFFF), or an exception will be thrown.
17769 *this* raised to the *nth* power.
17775 BigInteger.prototype.pow = function(n) {
17776 if (this.isUnit()) {
17781 return BigInteger(n).isOdd() ? this : this.negate();
17789 else if (n._s <
0) {
17790 if (this._s ===
0) {
17791 throw new Error(
"Divide by zero");
17797 if (this._s ===
0) {
17804 if (n.compareAbs(MAX_EXP)
> 0) {
17805 throw new Error(
"exponent too large in BigInteger.pow");
17809 var two = BigInteger.small[
2];
17811 while (n.isPositive()) {
17813 aux = aux.multiply(x);
17819 n = n.quotient(two);
17827 Raise a
<BigInteger> to a power (mod m).
17829 Because it is reduced by a modulus,
<modPow> is not limited by
17830 <BigInteger.MAX_EXP
> like
<pow>.
17834 exponent - The exponent to raise *this* by. Must be positive.
17835 modulus - The modulus.
17839 *this* ^ *exponent* (mod *modulus*).
17845 BigInteger.prototype.modPow = function(exponent, modulus) {
17849 while (exponent.isPositive()) {
17850 if (exponent.isOdd()) {
17851 result = result.multiply(base).remainder(modulus);
17854 exponent = exponent.quotient(BigInteger.small[
2]);
17855 if (exponent.isPositive()) {
17856 base = base.square().remainder(modulus);
17865 Get the natural logarithm of a
<BigInteger> as a native JavaScript number.
17867 This is equivalent to
17869 > Math.log(this.toJSValue())
17871 but handles values outside of the native number range.
17881 BigInteger.prototype.log = function() {
17883 case
0: return -Infinity;
17884 case -
1: return NaN;
17885 default: // Fall through.
17888 var l = this._d.length;
17890 if (l*BigInteger_base_log10 <
30) {
17891 return Math.log(this.valueOf());
17894 var N = Math.ceil(
30/BigInteger_base_log10);
17895 var firstNdigits = this._d.slice(l - N);
17896 return Math.log((new BigInteger(firstNdigits,
1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
17901 Convert a
<BigInteger> to a native JavaScript integer.
17903 This is called automatically by JavaScipt to convert a
<BigInteger> to a
17908 > parseInt(this.toString(),
10)
17912 <toString>,
<toJSValue>
17914 BigInteger.prototype.valueOf = function() {
17915 return parseInt(this.toString(),
10);
17919 Function: toJSValue
17920 Convert a
<BigInteger> to a native JavaScript integer.
17922 This is the same as valueOf, but more explicitly named.
17926 > parseInt(this.toString(),
10)
17930 <toString>,
<valueOf>
17932 BigInteger.prototype.toJSValue = function() {
17933 return parseInt(this.toString(),
10);
17936 var MAX_EXP = BigInteger(
0x7FFFFFFF);
17937 // Constant: MAX_EXP
17938 // The largest exponent allowed in
<pow> and
<exp10> (
0x7FFFFFFF or
2147483647).
17939 BigInteger.MAX_EXP = MAX_EXP;
17942 function makeUnary(fn) {
17943 return function(a) {
17944 return fn.call(BigInteger(a));
17948 function makeBinary(fn) {
17949 return function(a, b) {
17950 return fn.call(BigInteger(a), BigInteger(b));
17954 function makeTrinary(fn) {
17955 return function(a, b, c) {
17956 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
17962 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
17963 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
17964 var trinary = ["modPow"];
17966 for (i =
0; i < unary.length; i++) {
17968 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
17971 for (i =
0; i < binary.length; i++) {
17973 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
17976 for (i =
0; i < trinary.length; i++) {
17978 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
17981 BigInteger.exp10 = function(x, n) {
17982 return BigInteger(x).exp10(n);
17987 exports.BigInteger = BigInteger;
17988 })(typeof exports !== 'undefined' ? exports : this);
17990 <script>(function() {
17992 // mnemonics is populated as required by getLanguage
17993 var mnemonics = { "english": new Mnemonic("english") };
17994 var mnemonic = mnemonics["english"];
17996 var bip32RootKey = null;
17997 var bip32ExtendedKey = null;
17998 var network = bitcoin.networks.bitcoin;
17999 var addressRowTemplate = $("#address-row-template");
18001 var showIndex = true;
18002 var showAddress = true;
18003 var showPubKey = true;
18004 var showPrivKey = true;
18006 var entropyChangeTimeoutEvent = null;
18007 var phraseChangeTimeoutEvent = null;
18008 var rootKeyChangedTimeoutEvent = null;
18011 DOM.network = $(".network");
18012 DOM.phraseNetwork = $("#network-phrase");
18013 DOM.useEntropy = $(".use-entropy");
18014 DOM.entropyContainer = $(".entropy-container");
18015 DOM.entropy = $(".entropy");
18016 DOM.entropyError = $(".entropy-error");
18017 DOM.phrase = $(".phrase");
18018 DOM.passphrase = $(".passphrase");
18019 DOM.generateContainer = $(".generate-container");
18020 DOM.generate = $(".generate");
18021 DOM.seed = $(".seed");
18022 DOM.rootKey = $(".root-key");
18023 DOM.extendedPrivKey = $(".extended-priv-key");
18024 DOM.extendedPubKey = $(".extended-pub-key");
18025 DOM.bip32tab = $("#bip32-tab");
18026 DOM.bip44tab = $("#bip44-tab");
18027 DOM.bip32panel = $("#bip32");
18028 DOM.bip44panel = $("#bip44");
18029 DOM.bip32path = $("#bip32-path");
18030 DOM.bip44path = $("#bip44-path");
18031 DOM.bip44purpose = $("#bip44 .purpose");
18032 DOM.bip44coin = $("#bip44 .coin");
18033 DOM.bip44account = $("#bip44 .account");
18034 DOM.bip44change = $("#bip44 .change");
18035 DOM.strength = $(".strength");
18036 DOM.hardenedAddresses = $(".hardened-addresses");
18037 DOM.addresses = $(".addresses");
18038 DOM.rowsToAdd = $(".rows-to-add");
18039 DOM.more = $(".more");
18040 DOM.feedback = $(".feedback");
18041 DOM.tab = $(".derivation-type a");
18042 DOM.indexToggle = $(".index-toggle");
18043 DOM.addressToggle = $(".address-toggle");
18044 DOM.publicKeyToggle = $(".public-key-toggle");
18045 DOM.privateKeyToggle = $(".private-key-toggle");
18046 DOM.languages = $(".languages a");
18050 DOM.network.on("change", networkChanged);
18051 DOM.useEntropy.on("change", setEntropyVisibility);
18052 DOM.entropy.on("input", delayedEntropyChanged);
18053 DOM.phrase.on("input", delayedPhraseChanged);
18054 DOM.passphrase.on("input", delayedPhraseChanged);
18055 DOM.generate.on("click", generateClicked);
18056 DOM.more.on("click", showMore);
18057 DOM.rootKey.on("input", delayedRootKeyChanged);
18058 DOM.bip32path.on("input", calcForDerivationPath);
18059 DOM.bip44purpose.on("input", calcForDerivationPath);
18060 DOM.bip44coin.on("input", calcForDerivationPath);
18061 DOM.bip44account.on("input", calcForDerivationPath);
18062 DOM.bip44change.on("input", calcForDerivationPath);
18063 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
18064 DOM.hardenedAddresses.on("change", calcForDerivationPath);
18065 DOM.indexToggle.on("click", toggleIndexes);
18066 DOM.addressToggle.on("click", toggleAddresses);
18067 DOM.publicKeyToggle.on("click", togglePublicKeys);
18068 DOM.privateKeyToggle.on("click", togglePrivateKeys);
18069 DOM.languages.on("click", languageChanged);
18072 hideValidationError();
18073 populateNetworkSelect();
18078 function networkChanged(e) {
18079 var networkIndex = e.target.value;
18080 networks[networkIndex].onSelect();
18081 if (seed != null) {
18089 function setEntropyVisibility() {
18090 if (isUsingOwnEntropy()) {
18091 DOM.entropyContainer.removeClass("hidden");
18092 DOM.generateContainer.addClass("hidden");
18093 DOM.phrase.prop("readonly", true);
18094 DOM.entropy.focus();
18098 DOM.entropyContainer.addClass("hidden");
18099 DOM.generateContainer.removeClass("hidden");
18100 DOM.phrase.prop("readonly", false);
18104 function delayedPhraseChanged() {
18105 hideValidationError();
18107 if (phraseChangeTimeoutEvent != null) {
18108 clearTimeout(phraseChangeTimeoutEvent);
18110 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
18113 function phraseChanged() {
18115 hideValidationError();
18116 setMnemonicLanguage();
18117 // Get the mnemonic phrase
18118 var phrase = DOM.phrase.val();
18119 var errorText = findPhraseErrors(phrase);
18121 showValidationError(errorText);
18124 // Calculate and display
18125 var passphrase = DOM.passphrase.val();
18126 calcBip32RootKeyFromSeed(phrase, passphrase);
18127 calcForDerivationPath();
18131 function delayedEntropyChanged() {
18132 hideValidationError();
18134 if (entropyChangeTimeoutEvent != null) {
18135 clearTimeout(entropyChangeTimeoutEvent);
18137 entropyChangeTimeoutEvent = setTimeout(entropyChanged,
400);
18140 function entropyChanged() {
18141 setMnemonicFromEntropy();
18145 function delayedRootKeyChanged() {
18146 // Warn if there is an existing mnemonic or passphrase.
18147 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
18148 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
18149 DOM.rootKey.val(bip32RootKey);
18153 hideValidationError();
18155 // Clear existing mnemonic and passphrase
18156 DOM.phrase.val(
"");
18157 DOM.passphrase.val(
"");
18159 if (rootKeyChangedTimeoutEvent != null) {
18160 clearTimeout(rootKeyChangedTimeoutEvent);
18162 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
18165 function rootKeyChanged() {
18167 hideValidationError();
18168 // Validate the root key TODO
18169 var rootKeyBase58 = DOM.rootKey.val();
18170 var errorText = validateRootKey(rootKeyBase58);
18172 showValidationError(errorText);
18175 // Calculate and display
18176 calcBip32RootKeyFromBase58(rootKeyBase58);
18177 calcForDerivationPath();
18181 function calcForDerivationPath() {
18183 hideValidationError();
18184 // Get the derivation path
18185 var derivationPath = getDerivationPath();
18186 var errorText = findDerivationPathErrors(derivationPath);
18188 showValidationError(errorText);
18191 calcBip32ExtendedKey(derivationPath);
18192 displayBip32Info();
18196 function generateClicked() {
18197 if (isUsingOwnEntropy()) {
18202 setTimeout(function() {
18203 setMnemonicLanguage();
18204 var phrase = generateRandomPhrase();
18212 function languageChanged() {
18213 setTimeout(function() {
18214 setMnemonicLanguage();
18215 if (DOM.phrase.val().length
> 0) {
18216 var newPhrase = convertPhraseToNewLanguage();
18217 DOM.phrase.val(newPhrase);
18221 DOM.generate.trigger(
"click");
18226 function toggleIndexes() {
18227 showIndex = !showIndex;
18228 $(
"td.index span").toggleClass(
"invisible");
18231 function toggleAddresses() {
18232 showAddress = !showAddress;
18233 $(
"td.address span").toggleClass(
"invisible");
18236 function togglePublicKeys() {
18237 showPubKey = !showPubKey;
18238 $(
"td.pubkey span").toggleClass(
"invisible");
18241 function togglePrivateKeys() {
18242 showPrivKey = !showPrivKey;
18243 $(
"td.privkey span").toggleClass(
"invisible");
18248 function generateRandomPhrase() {
18249 if (!hasStrongRandom()) {
18250 var errorText =
"This browser does not support strong randomness";
18251 showValidationError(errorText);
18254 var numWords = parseInt(DOM.strength.val());
18255 var strength = numWords /
3 *
32;
18256 var words = mnemonic.generate(strength);
18257 DOM.phrase.val(words);
18261 function calcBip32RootKeyFromSeed(phrase, passphrase) {
18262 seed = mnemonic.toSeed(phrase, passphrase);
18263 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
18266 function calcBip32RootKeyFromBase58(rootKeyBase58) {
18267 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
18270 function calcBip32ExtendedKey(path) {
18271 bip32ExtendedKey = bip32RootKey;
18272 // Derive the key from the path
18273 var pathBits = path.split(
"/");
18274 for (var i=
0; i
<pathBits.length; i++) {
18275 var bit = pathBits[i];
18276 var index = parseInt(bit);
18277 if (isNaN(index)) {
18280 var hardened = bit[bit.length-
1] ==
"'";
18282 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
18285 bip32ExtendedKey = bip32ExtendedKey.derive(index);
18290 function showValidationError(errorText) {
18296 function hideValidationError() {
18302 function findPhraseErrors(phrase) {
18303 // TODO make this right
18304 // Preprocess the words
18305 phrase = mnemonic.normalizeString(phrase);
18306 var words = phraseToWordArray(phrase);
18308 for (var i=
0; i
<words.length; i++) {
18309 var word = words[i];
18310 var language = getLanguage();
18311 if (WORDLISTS[language].indexOf(word) == -
1) {
18312 console.log(
"Finding closest match to " + word);
18313 var nearestWord = findNearestWord(word);
18314 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
18317 // Check the words are valid
18318 var properPhrase = wordArrayToPhrase(words);
18319 var isValid = mnemonic.check(properPhrase);
18321 return
"Invalid mnemonic";
18326 function validateRootKey(rootKeyBase58) {
18328 bitcoin.HDNode.fromBase58(rootKeyBase58);
18331 return
"Invalid root key";
18336 function getDerivationPath() {
18337 if (DOM.bip44tab.hasClass(
"active")) {
18338 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
18339 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
18340 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
18341 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
18343 path += purpose +
"'/";
18344 path += coin +
"'/";
18345 path += account +
"'/";
18347 DOM.bip44path.val(path);
18348 var derivationPath = DOM.bip44path.val();
18349 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
18350 return derivationPath;
18352 else if (DOM.bip32tab.hasClass(
"active")) {
18353 var derivationPath = DOM.bip32path.val();
18354 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
18355 return derivationPath;
18358 console.log(
"Unknown derivation path");
18362 function findDerivationPathErrors(path) {
18363 // TODO is not perfect but is better than nothing
18365 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
18367 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
18368 var maxDepth =
255; // TODO verify this!!
18369 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
18370 if (path[
0] !=
"m") {
18371 return
"First character must be 'm'";
18373 if (path.length
> 1) {
18374 if (path[
1] !=
"/") {
18375 return
"Separator must be '/'";
18377 var indexes = path.split(
"/");
18378 if (indexes.length
> maxDepth) {
18379 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
18381 for (var depth =
1; depth
<indexes.length; depth++) {
18382 var index = indexes[depth];
18383 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
18384 if (invalidChars.length
> 0) {
18385 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
18387 var indexValue = parseInt(index.replace(
"'",
""));
18388 if (isNaN(depth)) {
18389 return
"Invalid number at depth " + depth;
18391 if (indexValue
> maxIndexValue) {
18392 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
18399 function displayBip32Info() {
18401 DOM.seed.val(seed);
18402 var rootKey = bip32RootKey.toBase58();
18403 DOM.rootKey.val(rootKey);
18404 var extendedPrivKey = bip32ExtendedKey.toBase58();
18405 DOM.extendedPrivKey.val(extendedPrivKey);
18406 var extendedPubKey = bip32ExtendedKey.toBase58(false);
18407 DOM.extendedPubKey.val(extendedPubKey);
18408 // Display the addresses and privkeys
18409 clearAddressesList();
18410 displayAddresses(
0,
20);
18413 function displayAddresses(start, total) {
18414 for (var i=
0; i
<total; i++) {
18415 var index = i + start;
18416 new TableRow(index);
18420 function TableRow(index) {
18422 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
18428 function calculateValues() {
18429 setTimeout(function() {
18431 if (useHardenedAddresses) {
18432 key = bip32ExtendedKey.deriveHardened(index);
18435 key = bip32ExtendedKey.derive(index);
18437 var address = key.getAddress().toString();
18438 var privkey = key.privKey.toWIF(network);
18439 var pubkey = key.pubKey.toHex();
18440 var indexText = getDerivationPath() +
"/" + index;
18441 if (useHardenedAddresses) {
18442 indexText = indexText +
"'";
18444 addAddressToList(indexText, address, pubkey, privkey);
18452 function showMore() {
18453 var start = DOM.addresses.children().length;
18454 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
18455 if (isNaN(rowsToAdd)) {
18457 DOM.rowsToAdd.val(
"20");
18459 if (rowsToAdd
> 200) {
18460 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
18461 msg +=
"Do you want to continue?";
18462 if (!confirm(msg)) {
18466 displayAddresses(start, rowsToAdd);
18469 function clearDisplay() {
18470 clearAddressesList();
18472 hideValidationError();
18475 function clearAddressesList() {
18476 DOM.addresses.empty();
18479 function clearKey() {
18480 DOM.rootKey.val(
"");
18481 DOM.extendedPrivKey.val(
"");
18482 DOM.extendedPubKey.val(
"");
18485 function addAddressToList(indexText, address, pubkey, privkey) {
18486 var row = $(addressRowTemplate.html());
18488 var indexCell = row.find(
".index span");
18489 var addressCell = row.find(
".address span");
18490 var pubkeyCell = row.find(
".pubkey span");
18491 var privkeyCell = row.find(
".privkey span");
18493 indexCell.text(indexText);
18494 addressCell.text(address);
18495 pubkeyCell.text(pubkey);
18496 privkeyCell.text(privkey);
18499 indexCell.addClass(
"invisible");
18501 if (!showAddress) {
18502 addressCell.addClass(
"invisible");
18505 pubkeyCell.addClass(
"invisible");
18507 if (!showPrivKey) {
18508 privkeyCell.addClass(
"invisible");
18510 DOM.addresses.append(row);
18513 function hasStrongRandom() {
18514 return 'crypto' in window && window['crypto'] !== null;
18517 function disableForms() {
18518 $(
"form").on(
"submit", function(e) {
18519 e.preventDefault();
18523 function parseIntNoNaN(val, defaultVal) {
18524 var v = parseInt(val);
18531 function showPending() {
18533 .text(
"Calculating...")
18537 function findNearestWord(word) {
18538 var language = getLanguage();
18539 var words = WORDLISTS[language];
18540 var minDistance =
99;
18541 var closestWord = words[
0];
18542 for (var i=
0; i
<words.length; i++) {
18543 var comparedTo = words[i];
18544 var distance = Levenshtein.get(word, comparedTo);
18545 if (distance < minDistance) {
18546 closestWord = comparedTo;
18547 minDistance = distance;
18550 return closestWord;
18553 function hidePending() {
18559 function populateNetworkSelect() {
18560 for (var i=
0; i
<networks.length; i++) {
18561 var network = networks[i];
18562 var option = $(
"<option>");
18563 option.attr(
"value", i);
18564 option.text(network.name);
18565 DOM.phraseNetwork.append(option);
18569 function getLanguage() {
18570 var defaultLanguage =
"english";
18571 // Try to get from existing phrase
18572 var language = getLanguageFromPhrase();
18573 // Try to get from url if not from phrase
18574 if (language.length ==
0) {
18575 language = getLanguageFromUrl();
18577 // Default to English if no other option
18578 if (language.length ==
0) {
18579 language = defaultLanguage;
18584 function getLanguageFromPhrase(phrase) {
18585 // Check if how many words from existing phrase match a language.
18588 phrase = DOM.phrase.val();
18590 if (phrase.length
> 0) {
18591 var words = phraseToWordArray(phrase);
18592 var languageMatches = {};
18593 for (l in WORDLISTS) {
18594 // Track how many words match in this language
18595 languageMatches[l] =
0;
18596 for (var i=
0; i
<words.length; i++) {
18597 var wordInLanguage = WORDLISTS[l].indexOf(words[i])
> -
1;
18598 if (wordInLanguage) {
18599 languageMatches[l]++;
18602 // Find languages with most word matches.
18603 // This is made difficult due to commonalities between Chinese
18604 // simplified vs traditional.
18605 var mostMatches =
0;
18606 var mostMatchedLanguages = [];
18607 for (var l in languageMatches) {
18608 var numMatches = languageMatches[l];
18609 if (numMatches
> mostMatches) {
18610 mostMatches = numMatches;
18611 mostMatchedLanguages = [l];
18613 else if (numMatches == mostMatches) {
18614 mostMatchedLanguages.push(l);
18618 if (mostMatchedLanguages.length
> 0) {
18619 // Use first language and warn if multiple detected
18620 language = mostMatchedLanguages[
0];
18621 if (mostMatchedLanguages.length
> 1) {
18622 console.warn(
"Multiple possible languages");
18623 console.warn(mostMatchedLanguages);
18630 function getLanguageFromUrl() {
18631 for (var language in WORDLISTS) {
18632 if (window.location.hash.indexOf(language)
> -
1) {
18639 function setMnemonicLanguage() {
18640 var language = getLanguage();
18641 // Load the bip39 mnemonic generator for this language if required
18642 if (!(language in mnemonics)) {
18643 mnemonics[language] = new Mnemonic(language);
18645 mnemonic = mnemonics[language];
18648 function convertPhraseToNewLanguage() {
18649 var oldLanguage = getLanguageFromPhrase();
18650 var newLanguage = getLanguageFromUrl();
18651 var oldPhrase = DOM.phrase.val();
18652 var oldWords = phraseToWordArray(oldPhrase);
18654 for (var i=
0; i
<oldWords.length; i++) {
18655 var oldWord = oldWords[i];
18656 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
18657 var newWord = WORDLISTS[newLanguage][index];
18658 newWords.push(newWord);
18660 newPhrase = wordArrayToPhrase(newWords);
18664 // TODO look at jsbip39 - mnemonic.splitWords
18665 function phraseToWordArray(phrase) {
18666 var words = phrase.split(/\s/g);
18668 for (var i=
0; i
<words.length; i++) {
18669 var word = words[i];
18670 if (word.length
> 0) {
18671 noBlanks.push(word);
18677 // TODO look at jsbip39 - mnemonic.joinWords
18678 function wordArrayToPhrase(words) {
18679 var phrase = words.join(
" ");
18680 var language = getLanguageFromPhrase(phrase);
18681 if (language ==
"japanese") {
18682 phrase = words.join(
"\u3000");
18687 function isUsingOwnEntropy() {
18688 return DOM.useEntropy.prop(
"checked");
18691 function setMnemonicFromEntropy() {
18692 hideEntropyError();
18693 // Work out minimum base for entropy
18694 var entropyStr = DOM.entropy.val();
18695 var entropy = Entropy.fromString(entropyStr);
18696 if (entropy.hexStr.length ==
0) {
18699 // Show entropy details
18700 var extraBits =
32 - (entropy.binaryStr.length %
32);
18701 var extraChars = Math.ceil(extraBits * Math.log(
2) / Math.log(entropy.base.asInt));
18702 var strength =
"an extremely weak";
18703 if (entropy.hexStr.length
>=
8) {
18704 strength = "a very weak";
18706 if (entropy.hexStr.length
>=
12) {
18707 strength = "a weak";
18709 if (entropy.hexStr.length
>=
24) {
18710 strength = "a strong";
18712 if (entropy.hexStr.length
>=
32) {
18713 strength = "a very strong";
18715 if (entropy.hexStr.length
>=
40) {
18716 strength = "an extremely strong";
18718 if (entropy.hexStr.length
>=
48) {
18719 strength = "an even stronger"
18721 var msg = "Have " + entropy.binaryStr.length + " bits of entropy, " + extraChars + " more " + entropy.base.str + " chars required to generate " + strength + " mnemonic: " + entropy.cleanStr;
18722 showEntropyError(msg);
18723 // Discard trailing entropy
18724 var hexStr = entropy.hexStr.substring(
0, Math.floor(entropy.hexStr.length /
8) *
8);
18725 // Convert entropy string to numeric array
18726 var entropyArr = [];
18727 for (var i=
0; i
<hexStr.length /
2; i++) {
18728 var entropyByte = parseInt(hexStr[i*
2].concat(hexStr[i*
2+
1]),
16);
18729 entropyArr.push(entropyByte)
18731 // Convert entropy array to mnemonic
18732 var phrase = mnemonic.toMnemonic(entropyArr);
18733 // Set the mnemonic in the UI
18734 DOM.phrase.val(phrase);
18737 function hideEntropyError() {
18738 DOM.entropyError.addClass(
"hidden");
18741 function showEntropyError(msg) {
18742 DOM.entropyError.text(msg);
18743 DOM.entropyError.removeClass(
"hidden");
18749 onSelect: function() {
18750 network = bitcoin.networks.bitcoin;
18751 DOM.bip44coin.val(
0);
18755 name:
"Bitcoin Testnet",
18756 onSelect: function() {
18757 network = bitcoin.networks.testnet;
18758 DOM.bip44coin.val(
1);
18763 onSelect: function() {
18764 network = bitcoin.networks.litecoin;
18765 DOM.bip44coin.val(
2);
18770 onSelect: function() {
18771 network = bitcoin.networks.dogecoin;
18772 DOM.bip44coin.val(
3);
18776 name:
"ShadowCash",
18777 onSelect: function() {
18778 network = bitcoin.networks.shadow;
18779 DOM.bip44coin.val(
35);
18783 name:
"ShadowCash Testnet",
18784 onSelect: function() {
18785 network = bitcoin.networks.shadowtn;
18786 DOM.bip44coin.val(
1);
18791 onSelect: function() {
18792 network = bitcoin.networks.viacoin;
18793 DOM.bip44coin.val(
14);
18797 name:
"Viacoin Testnet",
18798 onSelect: function() {
18799 network = bitcoin.networks.viacointestnet;
18800 DOM.bip44coin.val(
1);
18805 onSelect: function() {
18806 network = bitcoin.networks.jumbucks;
18807 DOM.bip44coin.val(
26);
18812 onSelect: function() {
18813 network = bitcoin.networks.clam;
18814 DOM.bip44coin.val(
23);
18819 onSelect: function() {
18820 network = bitcoin.networks.dash;
18821 DOM.bip44coin.val(
5);
18826 onSelect: function() {
18827 network = bitcoin.networks.namecoin;
18828 DOM.bip44coin.val(
7);
18833 onSelect: function() {
18834 network = bitcoin.networks.peercoin;
18835 DOM.bip44coin.val(
6);