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;
61 <div class=
"container">
63 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
66 <div class=
"col-md-12">
68 <form class=
"form-horizontal" role=
"form">
69 <div class=
"col-sm-2"></div>
70 <div class=
"col-sm-10">
71 <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>
72 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
74 <div class=
"form-group">
75 <label class=
"col-sm-2 control-label"></label>
76 <div class=
"col-sm-10">
77 <div class=
"form-inline">
78 <div class=
"input-group-inline">
79 <button class=
"btn generate">Generate
</button>
81 <select id=
"strength" class=
"strength form-control">
82 <option value=
"3">3</option>
83 <option value=
"6">6</option>
84 <option value=
"9">9</option>
85 <option value=
"12">12</option>
86 <option value=
"15" selected
>15</option>
87 <option value=
"18">18</option>
88 <option value=
"21">21</option>
89 <option value=
"24">24</option>
91 word mnemonic, or enter your own below.
96 <div class=
"form-group">
97 <label class=
"col-sm-2 control-label"></label>
98 <div class=
"col-sm-10 languages">
99 <a href=
"#english">English
</a>
100 <a href=
"#japanese" title=
"Japanese">日本語
</a>
101 <a href=
"#spanish" title=
"Spanish">Español
</a>
102 <a href=
"#chinese_simplified" title=
"Chinese (Simplified)">中文(简体)
</a>
103 <a href=
"#chinese_traditional" title=
"Chinese (Traditional)">中文(繁體)
</a>
104 <a href=
"#french" title=
"French">Français
</a>
105 <a href=
"#italian" title=
"Italian">Italiano
</a>
108 <div class=
"form-group">
109 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
110 <div class=
"col-sm-10">
111 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
114 <div class=
"form-group">
115 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
116 <div class=
"col-sm-10">
117 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
120 <div class=
"form-group">
121 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
122 <div class=
"col-sm-10">
123 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
126 <div class=
"form-group">
127 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
128 <div class=
"col-sm-10">
129 <select id=
"network-phrase" class=
"network form-control">
130 <!-- populated by javascript -->
134 <div class=
"form-group">
135 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
136 <div class=
"col-sm-10">
137 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
147 <div class=
"col-md-12">
148 <h2>Derivation Path
</h2>
149 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
150 <li id=
"bip44-tab" class=
"active">
151 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
154 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
157 <div class=
"derivation-type tab-content">
158 <div id=
"bip44" class=
"tab-pane active">
159 <form class=
"form-horizontal" role=
"form">
161 <div class=
"col-sm-2"></div>
162 <div class=
"col-sm-10">
163 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
165 <div class=
"form-group">
166 <label for=
"purpose" class=
"col-sm-2 control-label">
167 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
169 <div class=
"col-sm-10">
170 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
173 <div class=
"form-group">
174 <label for=
"coin" class=
"col-sm-2 control-label">
175 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
177 <div class=
"col-sm-10">
178 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
181 <div class=
"form-group">
182 <label for=
"account" class=
"col-sm-2 control-label">
183 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
185 <div class=
"col-sm-10">
186 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
189 <div class=
"form-group">
190 <label for=
"change" class=
"col-sm-2 control-label">
191 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
193 <div class=
"col-sm-10">
194 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
197 <div class=
"form-group">
198 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
199 <div class=
"col-sm-10">
200 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
205 <div id=
"bip32" class=
"tab-pane">
206 <form class=
"form-horizontal" role=
"form">
208 <div class=
"col-sm-2"></div>
209 <div class=
"col-sm-10">
210 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
212 <div class=
"form-group">
213 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
214 <div class=
"col-sm-10">
215 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
218 <div class=
"form-group">
219 <div class=
"col-sm-2"></div>
220 <label class=
"col-sm-10">
221 <input class=
"hardened-addresses" type=
"checkbox">
222 Use hardened addresses
225 <div class=
"form-group">
226 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
227 <div class=
"col-sm-10">
228 <p class=
"form-control no-border">
229 Use path
<code>m/
0'/
0</code>.
230 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
234 <div class=
"form-group">
235 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
236 <div class=
"col-sm-10">
237 <p class=
"form-control no-border">
238 Use path
<code>m/
44'/
0'/
0'/
0</code>.
239 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
243 <div class=
"form-group">
244 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
245 <div class=
"col-sm-10">
246 <p class=
"form-control no-border">
247 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
248 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
252 <div class=
"form-group">
253 <label class=
"col-sm-2 control-label">Block Explorers
</label>
254 <div class=
"col-sm-10">
255 <p class=
"form-control no-border">
256 Use path
<code>m/
44'/
0'/
0'
</code>.
257 Only enter the
<code>xpub
</code> extended key into block explorer search fields, never the
<code>xpriv
</code> key.
264 <form class=
"form-horizontal" role=
"form">
265 <div class=
"form-group">
266 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
267 <div class=
"col-sm-10">
268 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
271 <div class=
"form-group">
272 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
273 <div class=
"col-sm-10">
274 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
284 <div class=
"col-md-12">
285 <h2>Derived Addresses
</h2>
286 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
287 <table class=
"table table-striped">
290 <div class=
"input-group">
292 <button class=
"index-toggle">Toggle
</button>
296 <div class=
"input-group">
298 <button class=
"address-toggle">Toggle
</button>
302 <div class=
"input-group">
303 Private Key
304 <button class=
"private-key-toggle">Toggle
</button>
308 <tbody class=
"addresses">
309 <tr><td> </td><td> </td><td> </td></tr>
310 <tr><td> </td><td> </td><td> </td></tr>
311 <tr><td> </td><td> </td><td> </td></tr>
312 <tr><td> </td><td> </td><td> </td></tr>
313 <tr><td> </td><td> </td><td> </td></tr>
318 <span>Show next
</button>
319 <input type=
"number" class=
"rows-to-add" value=
"20">
320 <button class=
"more">Show
</button>
325 <div class=
"col-md-12">
327 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
330 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
332 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
335 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
337 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
339 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
342 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
344 <h3>Private Keys
</h3>
347 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
348 but be careful - it can be easy to make mistakes if you
349 don't know what you're doing
357 <div class=
"col-md-12">
359 <h2>Offline Usage
</h2>
362 You can use this tool without having to be online.
365 In your browser, select file save-as, and save this page
369 Double-click that file to open it in a browser
370 on any offline computer.
373 Alternatively, download it from
374 <a href=
"https://github.com/iancoleman/bip39">
375 https://github.com/iancoleman/bip39
384 <div class=
"col-md-12">
386 <h2>This project is
100% open-source code
</h2>
389 <span>Get the source code at -
</span>
390 <a href=
"https://github.com/iancoleman/bip39" target=
"_blank">
391 https://github.com/iancoleman/bip39
398 <span>BitcoinJS -
</span>
399 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
400 https://github.com/bitcoinjs/bitcoinjs-lib
405 <span>jsBIP39 -
</span>
406 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
407 https://github.com/iancoleman/jsbip39
413 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
414 https://github.com/bitwiseshiftleft/sjcl
419 <span>jQuery -
</span>
420 <a href=
"https://jquery.com/" target=
"_blank">
426 <span>Twitter Bootstrap -
</span>
427 <a href=
"http://getbootstrap.com/" target=
"_blank">
428 http://getbootstrap.com/
437 <div class=
"feedback-container">
438 <div class=
"feedback">Loading...
</div>
441 <script type=
"text/template" id=
"address-row-template">
443 <td class=
"index"><span></span></td>
444 <td class=
"address"><span></span></td>
445 <td class=
"privkey"><span></span></td>
448 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
449 !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)
450 },_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))
451 },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});
454 * Bootstrap v3.2.0 (http://getbootstrap.com)
455 * Copyright 2011-2014 Twitter, Inc.
456 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
458 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>
459 <script>(function() {
463 * Extend an Object with another Object's properties.
465 * The source objects are specified as additional arguments.
467 * @param dst Object the object to extend.
469 * @return Object the final object.
471 var _extend = function(dst) {
472 var sources = Array.prototype.slice.call(arguments,
1);
473 for (var i=
0; i
<sources.length; ++i) {
474 var src = sources[i];
476 if (src.hasOwnProperty(p)) dst[p] = src[p];
484 * Defer execution of given function.
485 * @param {Function} func
487 var _defer = function(func) {
488 if (typeof setImmediate === 'function') {
489 return setImmediate(func);
491 return setTimeout(func,
0);
496 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
500 * Calculate levenshtein distance of the two strings.
502 * @param str1 String the first string.
503 * @param str2 String the second string.
504 * @return Integer the levenshtein distance (
0 and above).
506 get: function(str1, str2) {
508 if (str1 === str2) return
0;
509 if (str1.length ===
0) return str2.length;
510 if (str2.length ===
0) return str1.length;
513 var prevRow = new Array(str2.length +
1),
514 curCol, nextCol, i, j, tmp;
516 // initialise previous row
517 for (i=
0; i
<prevRow.length; ++i) {
521 // calculate current row distance from previous row
522 for (i=
0; i
<str1.length; ++i) {
525 for (j=
0; j
<str2.length; ++j) {
529 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
536 tmp = prevRow[j +
1] +
1;
541 // copy current col value into previous (in preparation for next iteration)
545 // copy last col value into previous (in preparation for next iteration)
546 prevRow[j] = nextCol;
553 * Asynchronously calculate levenshtein distance of the two strings.
555 * @param str1 String the first string.
556 * @param str2 String the second string.
557 * @param cb Function callback function with signature: function(Error err, int distance)
558 * @param [options] Object additional options.
559 * @param [options.progress] Function progress callback with signature: function(percentComplete)
561 getAsync: function(str1, str2, cb, options) {
562 options = _extend({}, {
567 if (str1 === str2) return cb(null,
0);
568 if (str1.length ===
0) return cb(null, str2.length);
569 if (str2.length ===
0) return cb(null, str1.length);
572 var prevRow = new Array(str2.length +
1),
575 startTime, currentTime;
577 // initialise previous row
578 for (i=
0; i
<prevRow.length; ++i) {
586 var __calculate = function() {
588 startTime = new Date().valueOf();
589 currentTime = startTime;
591 // keep going until one second has elapsed
592 while (currentTime - startTime <
1000) {
593 // reached end of current row?
594 if (str2.length <= (++j)) {
595 // copy current into previous (in preparation for next iteration)
596 prevRow[j] = nextCol;
598 // if already done all chars
599 if (str1.length <= (++i)) {
600 return cb(null, nextCol);
602 // else if we have more left to do
613 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
620 tmp = prevRow[j +
1] +
1;
625 // copy current into previous (in preparation for next iteration)
629 currentTime = new Date().valueOf();
632 // send a progress update?
633 if (null !== options.progress) {
635 options.progress.call(null, (i *
100.0/ str1.length));
637 return cb('Progress callback: ' + err.toString());
651 if (typeof define !== "undefined" && define !== null && define.amd) {
657 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
658 module.exports = Levenshtein;
661 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
662 self.Levenshtein = Levenshtein;
664 // browser main thread
665 else if (typeof window !== "undefined" && window !== null) {
666 window.Levenshtein = Levenshtein;
671 <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){
672 // (public) Constructor
673 function BigInteger(a, b, c) {
674 if (!(this instanceof BigInteger))
675 return new BigInteger(a, b, c)
678 if (
"number" == typeof a) this.fromNumber(a, b, c)
679 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
680 else this.fromString(a, b)
684 var proto = BigInteger.prototype
686 // duck-typed isBigInteger
687 proto.__bigi = require('../package.json').version
688 BigInteger.isBigInteger = function (obj, check_ver) {
689 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
695 // am: Compute w_j += (x*this_i), propagate carries,
696 // c is initial carry, returns final carry.
697 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
698 // We need to select the fastest one that works in this environment.
700 // am1: use a single mult and divide to get the high bits,
701 // max digit bits should be
26 because
702 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
703 function am1(i, x, w, j, c, n) {
705 var v = x * this[i++] + w[j] + c
706 c = Math.floor(v /
0x4000000)
707 w[j++] = v &
0x3ffffff
711 // am2 avoids a big mult-and-extract completely.
712 // Max digit bits should be <=
30 because we do bitwise ops
713 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
714 function am2(i, x, w, j, c, n) {
718 var l = this[i] &
0x7fff
719 var h = this[i++]
>> 15
720 var m = xh * l + h * xl
721 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
722 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
723 w[j++] = l &
0x3fffffff
727 // Alternately, set max digit bits to
28 since some
728 // browsers slow down when dealing with
32-bit numbers.
729 function am3(i, x, w, j, c, n) {
733 var l = this[i] &
0x3fff
734 var h = this[i++]
>> 14
735 var m = xh * l + h * xl
736 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
737 c = (l
>> 28) + (m
>> 14) + xh * h
738 w[j++] = l &
0xfffffff
744 BigInteger.prototype.am = am1
747 BigInteger.prototype.DB = dbits
748 BigInteger.prototype.DM = ((
1 << dbits) -
1)
749 var DV = BigInteger.prototype.DV = (
1 << dbits)
752 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
753 BigInteger.prototype.F1 = BI_FP - dbits
754 BigInteger.prototype.F2 =
2 * dbits - BI_FP
757 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
758 var BI_RC = new Array()
760 rr =
"0".charCodeAt(
0)
761 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
762 rr =
"a".charCodeAt(
0)
763 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
764 rr =
"A".charCodeAt(
0)
765 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
767 function int2char(n) {
768 return BI_RM.charAt(n)
771 function intAt(s, i) {
772 var c = BI_RC[s.charCodeAt(i)]
773 return (c == null) ? -
1 : c
776 // (protected) copy this to r
777 function bnpCopyTo(r) {
778 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
783 // (protected) set from integer value x, -DV <= x < DV
784 function bnpFromInt(x) {
786 this.s = (x <
0) ? -
1 :
0
787 if (x
> 0) this[
0] = x
788 else if (x < -
1) this[
0] = x + DV
792 // return bigint initialized to value
794 var r = new BigInteger()
799 // (protected) set from string and radix
800 function bnpFromString(s, b) {
805 else if (b ==
8) k =
3
806 else if (b ==
256) k =
8; // byte array
807 else if (b ==
2) k =
1
808 else if (b ==
32) k =
5
809 else if (b ==
4) k =
2
820 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
822 if (s.charAt(i) == "-") mi = true
828 else if (sh + k
> self.DB) {
829 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
830 self[self.t++] = (x
>> (self.DB - sh))
832 self[self.t -
1] |= x << sh
834 if (sh
>= self.DB) sh -= self.DB
836 if (k ==
8 && (s[
0] &
0x80) !=
0) {
838 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
841 if (mi) BigInteger.ZERO.subTo(self, self)
844 // (protected) clamp off excess high words
845 function bnpClamp() {
846 var c = this.s & this.DM
847 while (this.t
> 0 && this[this.t -
1] == c)--this.t
850 // (public) return string representation in given radix
851 function bnToString(b) {
853 if (self.s <
0) return
"-" + self.negate()
857 else if (b ==
8) k =
3
858 else if (b ==
2) k =
1
859 else if (b ==
32) k =
5
860 else if (b ==
4) k =
2
861 else return self.toRadix(b)
862 var km = (
1 << k) -
1,
866 var p = self.DB - (i * self.DB) % k
868 if (p < self.DB && (d = self[i]
>> p)
> 0) {
874 d = (self[i] & ((
1 << p) -
1)) << (k - p)
875 d |= self[--i]
>> (p += self.DB - k)
877 d = (self[i]
>> (p -= k)) & km
884 if (m) r += int2char(d)
891 function bnNegate() {
892 var r = new BigInteger()
893 BigInteger.ZERO.subTo(this, r)
899 return (this.s <
0) ? this.negate() : this
902 // (public) return + if this
> a, - if this < a,
0 if equal
903 function bnCompareTo(a) {
908 if (r !=
0) return (this.s <
0) ? -r : r
910 if ((r = this[i] - a[i]) !=
0) return r
914 // returns bit length of the integer x
918 if ((t = x
>>> 16) !=
0) {
922 if ((t = x
>> 8) !=
0) {
926 if ((t = x
>> 4) !=
0) {
930 if ((t = x
>> 2) !=
0) {
934 if ((t = x
>> 1) !=
0) {
941 // (public) return the number of bits in
"this"
942 function bnBitLength() {
943 if (this.t <=
0) return
0
944 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
947 // (public) return the number of bytes in
"this"
948 function bnByteLength() {
949 return this.bitLength()
>> 3
952 // (protected) r = this << n*DB
953 function bnpDLShiftTo(n, r) {
955 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
956 for (i = n -
1; i
>=
0; --i) r[i] =
0
961 // (protected) r = this
>> n*DB
962 function bnpDRShiftTo(n, r) {
963 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
964 r.t = Math.max(this.t - n,
0)
968 // (protected) r = this << n
969 function bnpLShiftTo(n, r) {
972 var cbs = self.DB - bs
973 var bm = (
1 << cbs) -
1
974 var ds = Math.floor(n / self.DB),
975 c = (self.s << bs) & self.DM,
977 for (i = self.t -
1; i
>=
0; --i) {
978 r[i + ds +
1] = (self[i]
>> cbs) | c
979 c = (self[i] & bm) << bs
981 for (i = ds -
1; i
>=
0; --i) r[i] =
0
983 r.t = self.t + ds +
1
988 // (protected) r = this
>> n
989 function bnpRShiftTo(n, r) {
992 var ds = Math.floor(n / self.DB)
998 var cbs = self.DB - bs
999 var bm = (
1 << bs) -
1
1000 r[
0] = self[ds]
>> bs
1001 for (var i = ds +
1; i < self.t; ++i) {
1002 r[i - ds -
1] |= (self[i] & bm) << cbs
1003 r[i - ds] = self[i]
>> bs
1005 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
1010 // (protected) r = this - a
1011 function bnpSubTo(a, r) {
1015 m = Math.min(a.t, self.t)
1018 r[i++] = c & self.DM
1023 while (i < self.t) {
1025 r[i++] = c & self.DM
1033 r[i++] = c & self.DM
1038 r.s = (c <
0) ? -
1 :
0
1039 if (c < -
1) r[i++] = self.DV + c
1040 else if (c
> 0) r[i++] = c
1045 // (protected) r = this * a, r != this,a (HAC
14.12)
1046 //
"this" should be the larger one if appropriate.
1047 function bnpMultiplyTo(a, r) {
1052 while (--i
>=
0) r[i] =
0
1053 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1056 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1059 // (protected) r = this^
2, r != this (HAC
14.16)
1060 function bnpSquareTo(r) {
1062 var i = r.t =
2 * x.t
1063 while (--i
>=
0) r[i] =
0
1064 for (i =
0; i < x.t -
1; ++i) {
1065 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1066 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1071 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1076 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1077 // r != q, this != m. q or r may be null.
1078 function bnpDivRemTo(m, q, r) {
1081 if (pm.t <=
0) return
1084 if (q != null) q.fromInt(
0)
1085 if (r != null) self.copyTo(r)
1088 if (r == null) r = new BigInteger()
1089 var y = new BigInteger(),
1092 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1103 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1104 var d1 = self.FV / yt,
1105 d2 = (
1 << self.F1) / yt,
1109 t = (q == null) ? new BigInteger() : q
1111 if (r.compareTo(t)
>=
0) {
1115 BigInteger.ONE.dlShiftTo(ys, t)
1116 t.subTo(y, y); // "negative" y so we can replace sub with am later
1117 while (y.t < ys) y[y.t++] =
0
1119 // Estimate quotient digit
1120 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1121 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1124 while (r[i] < --qd) r.subTo(t, r)
1129 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1133 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1134 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1137 // (public) this mod a
1139 var r = new BigInteger()
1141 .divRemTo(a, null, r)
1142 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1146 // Modular reduction using
"classic" algorithm
1147 function Classic(m) {
1151 function cConvert(x) {
1152 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1156 function cRevert(x) {
1160 function cReduce(x) {
1161 x.divRemTo(this.m, null, x)
1164 function cMulTo(x, y, r) {
1169 function cSqrTo(x, r) {
1174 Classic.prototype.convert = cConvert
1175 Classic.prototype.revert = cRevert
1176 Classic.prototype.reduce = cReduce
1177 Classic.prototype.mulTo = cMulTo
1178 Classic.prototype.sqrTo = cSqrTo
1180 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1184 // xy(
2-xy) = (
1+km)(
1-km)
1185 // x[y(
2-xy)] =
1-k^
2m^
2
1186 // x[y(
2-xy)] ==
1 (mod m^
2)
1187 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1188 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1189 // JS multiply "overflows" differently from C/C++, so care is needed here.
1190 function bnpInvDigit() {
1191 if (this.t <
1) return
0
1193 if ((x &
1) ==
0) return
0
1194 var y = x &
3; // y ==
1/x mod
2^
2
1195 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1196 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1197 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1198 // last step - calculate inverse mod DV directly
1199 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1200 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1201 // we really want the negative inverse, and -DV < y < DV
1202 return (y
> 0) ? this.DV - y : -y
1205 // Montgomery reduction
1206 function Montgomery(m) {
1208 this.mp = m.invDigit()
1209 this.mpl = this.mp &
0x7fff
1210 this.mph = this.mp
>> 15
1211 this.um = (
1 << (m.DB -
15)) -
1
1216 function montConvert(x) {
1217 var r = new BigInteger()
1219 .dlShiftTo(this.m.t, r)
1220 r.divRemTo(this.m, null, r)
1221 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1226 function montRevert(x) {
1227 var r = new BigInteger()
1233 // x = x/R mod m (HAC
14.32)
1234 function montReduce(x) {
1235 while (x.t <= this.mt2) // pad x so am has enough room later
1237 for (var i =
0; i < this.m.t; ++i) {
1238 // faster way of calculating u0 = x[i]*mp mod DV
1239 var j = x[i] &
0x7fff
1240 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1241 // use am to combine the multiply-shift-add into one call
1243 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1245 while (x[j]
>= x.DV) {
1251 x.drShiftTo(this.m.t, x)
1252 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1255 // r = "x^
2/R mod m"; x != r
1256 function montSqrTo(x, r) {
1261 // r = "xy/R mod m"; x,y != r
1262 function montMulTo(x, y, r) {
1267 Montgomery.prototype.convert = montConvert
1268 Montgomery.prototype.revert = montRevert
1269 Montgomery.prototype.reduce = montReduce
1270 Montgomery.prototype.mulTo = montMulTo
1271 Montgomery.prototype.sqrTo = montSqrTo
1273 // (protected) true iff this is even
1274 function bnpIsEven() {
1275 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1278 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1279 function bnpExp(e, z) {
1280 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1281 var r = new BigInteger(),
1282 r2 = new BigInteger(),
1283 g = z.convert(this),
1288 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1298 // (public) this^e % m,
0 <= e <
2^
32
1299 function bnModPowInt(e, m) {
1301 if (e <
256 || m.isEven()) z = new Classic(m)
1302 else z = new Montgomery(m)
1303 return this.exp(e, z)
1307 proto.copyTo = bnpCopyTo
1308 proto.fromInt = bnpFromInt
1309 proto.fromString = bnpFromString
1310 proto.clamp = bnpClamp
1311 proto.dlShiftTo = bnpDLShiftTo
1312 proto.drShiftTo = bnpDRShiftTo
1313 proto.lShiftTo = bnpLShiftTo
1314 proto.rShiftTo = bnpRShiftTo
1315 proto.subTo = bnpSubTo
1316 proto.multiplyTo = bnpMultiplyTo
1317 proto.squareTo = bnpSquareTo
1318 proto.divRemTo = bnpDivRemTo
1319 proto.invDigit = bnpInvDigit
1320 proto.isEven = bnpIsEven
1324 proto.toString = bnToString
1325 proto.negate = bnNegate
1327 proto.compareTo = bnCompareTo
1328 proto.bitLength = bnBitLength
1329 proto.byteLength = bnByteLength
1331 proto.modPowInt = bnModPowInt
1334 function bnClone() {
1335 var r = new BigInteger()
1340 // (public) return value as integer
1341 function bnIntValue() {
1343 if (this.t ==
1) return this[
0] - this.DV
1344 else if (this.t ==
0) return -
1
1345 } else if (this.t ==
1) return this[
0]
1346 else if (this.t ==
0) return
0
1347 // assumes
16 < DB <
32
1348 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1351 // (public) return value as byte
1352 function bnByteValue() {
1353 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1356 // (public) return value as short (assumes DB
>=
16)
1357 function bnShortValue() {
1358 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1361 // (protected) return x s.t. r^x < DV
1362 function bnpChunkSize(r) {
1363 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1366 // (public)
0 if this ==
0,
1 if this
> 0
1367 function bnSigNum() {
1368 if (this.s <
0) return -
1
1369 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1373 // (protected) convert to radix string
1374 function bnpToRadix(b) {
1375 if (b == null) b =
10
1376 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1377 var cs = this.chunkSize(b)
1378 var a = Math.pow(b, cs)
1380 y = new BigInteger(),
1381 z = new BigInteger(),
1383 this.divRemTo(d, y, z)
1384 while (y.signum()
> 0) {
1385 r = (a + z.intValue())
1394 // (protected) convert from radix string
1395 function bnpFromRadix(s, b) {
1398 if (b == null) b =
10
1399 var cs = self.chunkSize(b)
1400 var d = Math.pow(b, cs),
1404 for (var i =
0; i < s.length; ++i) {
1407 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1413 self.dAddOffset(w,
0)
1419 self.dMultiply(Math.pow(b, j))
1420 self.dAddOffset(w,
0)
1422 if (mi) BigInteger.ZERO.subTo(self, self)
1425 // (protected) alternate constructor
1426 function bnpFromNumber(a, b, c) {
1428 if (
"number" == typeof b) {
1429 // new BigInteger(int,int,RNG)
1430 if (a <
2) self.fromInt(
1)
1432 self.fromNumber(a, c)
1433 if (!self.testBit(a -
1)) // force MSB set
1434 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1435 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1436 while (!self.isProbablePrime(b)) {
1437 self.dAddOffset(
2,
0)
1438 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1442 // new BigInteger(int,RNG)
1443 var x = new Array(),
1445 x.length = (a
>> 3) +
1
1447 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1449 self.fromString(x,
256)
1453 // (public) convert to bigendian byte array
1454 function bnToByteArray() {
1459 var p = self.DB - (i * self.DB) %
8,
1462 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1463 r[k++] = d | (self.s << (self.DB - p))
1466 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1467 d |= self[--i]
>> (p += self.DB -
8)
1469 d = (self[i]
>> (p -=
8)) &
0xff
1475 if ((d &
0x80) !=
0) d |= -
256
1476 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1477 if (k
> 0 || d != self.s) r[k++] = d
1483 function bnEquals(a) {
1484 return (this.compareTo(a) ==
0)
1488 return (this.compareTo(a) <
0) ? this : a
1492 return (this.compareTo(a)
> 0) ? this : a
1495 // (protected) r = this op a (bitwise)
1496 function bnpBitwiseTo(a, op, r) {
1498 var i, f, m = Math.min(a.t, self.t)
1499 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1502 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1505 f = self.s & self.DM
1506 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1509 r.s = op(self.s, a.s)
1513 // (public) this & a
1514 function op_and(x, y) {
1519 var r = new BigInteger()
1520 this.bitwiseTo(a, op_and, r)
1524 // (public) this | a
1525 function op_or(x, y) {
1530 var r = new BigInteger()
1531 this.bitwiseTo(a, op_or, r)
1535 // (public) this ^ a
1536 function op_xor(x, y) {
1541 var r = new BigInteger()
1542 this.bitwiseTo(a, op_xor, r)
1546 // (public) this & ~a
1547 function op_andnot(x, y) {
1551 function bnAndNot(a) {
1552 var r = new BigInteger()
1553 this.bitwiseTo(a, op_andnot, r)
1559 var r = new BigInteger()
1560 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1566 // (public) this << n
1567 function bnShiftLeft(n) {
1568 var r = new BigInteger()
1569 if (n <
0) this.rShiftTo(-n, r)
1570 else this.lShiftTo(n, r)
1574 // (public) this
>> n
1575 function bnShiftRight(n) {
1576 var r = new BigInteger()
1577 if (n <
0) this.lShiftTo(-n, r)
1578 else this.rShiftTo(n, r)
1582 // return index of lowest
1-bit in x, x <
2^
31
1584 if (x ==
0) return -
1
1586 if ((x &
0xffff) ==
0) {
1590 if ((x &
0xff) ==
0) {
1594 if ((x &
0xf) ==
0) {
1602 if ((x &
1) ==
0)++r
1606 // (public) returns index of lowest
1-bit (or -
1 if none)
1607 function bnGetLowestSetBit() {
1608 for (var i =
0; i < this.t; ++i)
1609 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1610 if (this.s <
0) return this.t * this.DB
1614 // return number of
1 bits in x
1624 // (public) return number of set bits
1625 function bnBitCount() {
1627 x = this.s & this.DM
1628 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1632 // (public) true iff nth bit is set
1633 function bnTestBit(n) {
1634 var j = Math.floor(n / this.DB)
1635 if (j
>= this.t) return (this.s !=
0)
1636 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1639 // (protected) this op (
1<
<n)
1640 function bnpChangeBit(n, op) {
1641 var r = BigInteger.ONE.shiftLeft(n)
1642 this.bitwiseTo(r, op, r)
1646 // (public) this | (
1<
<n)
1647 function bnSetBit(n) {
1648 return this.changeBit(n, op_or)
1651 // (public) this & ~(
1<
<n)
1652 function bnClearBit(n) {
1653 return this.changeBit(n, op_andnot)
1656 // (public) this ^ (
1<
<n)
1657 function bnFlipBit(n) {
1658 return this.changeBit(n, op_xor)
1661 // (protected) r = this + a
1662 function bnpAddTo(a, r) {
1667 m = Math.min(a.t, self.t)
1670 r[i++] = c & self.DM
1675 while (i < self.t) {
1677 r[i++] = c & self.DM
1685 r[i++] = c & self.DM
1690 r.s = (c <
0) ? -
1 :
0
1691 if (c
> 0) r[i++] = c
1692 else if (c < -
1) r[i++] = self.DV + c
1697 // (public) this + a
1699 var r = new BigInteger()
1704 // (public) this - a
1705 function bnSubtract(a) {
1706 var r = new BigInteger()
1711 // (public) this * a
1712 function bnMultiply(a) {
1713 var r = new BigInteger()
1714 this.multiplyTo(a, r)
1719 function bnSquare() {
1720 var r = new BigInteger()
1725 // (public) this / a
1726 function bnDivide(a) {
1727 var r = new BigInteger()
1728 this.divRemTo(a, r, null)
1732 // (public) this % a
1733 function bnRemainder(a) {
1734 var r = new BigInteger()
1735 this.divRemTo(a, null, r)
1739 // (public) [this/a,this%a]
1740 function bnDivideAndRemainder(a) {
1741 var q = new BigInteger(),
1742 r = new BigInteger()
1743 this.divRemTo(a, q, r)
1744 return new Array(q, r)
1747 // (protected) this *= n, this
>=
0,
1 < n < DV
1748 function bnpDMultiply(n) {
1749 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1754 // (protected) this += n << w words, this
>=
0
1755 function bnpDAddOffset(n, w) {
1757 while (this.t <= w) this[this.t++] =
0
1759 while (this[w]
>= this.DV) {
1761 if (++w
>= this.t) this[this.t++] =
0
1767 function NullExp() {}
1773 function nMulTo(x, y, r) {
1777 function nSqrTo(x, r) {
1781 NullExp.prototype.convert = nNop
1782 NullExp.prototype.revert = nNop
1783 NullExp.prototype.mulTo = nMulTo
1784 NullExp.prototype.sqrTo = nSqrTo
1788 return this.exp(e, new NullExp())
1791 // (protected) r = lower n words of "this * a", a.t <= n
1792 // "this" should be the larger one if appropriate.
1793 function bnpMultiplyLowerTo(a, n, r) {
1794 var i = Math.min(this.t + a.t, n)
1795 r.s =
0; // assumes a,this
>=
0
1797 while (i
> 0) r[--i] =
0
1799 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1800 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1804 // (protected) r =
"this * a" without lower n words, n
> 0
1805 //
"this" should be the larger one if appropriate.
1806 function bnpMultiplyUpperTo(a, n, r) {
1808 var i = r.t = this.t + a.t - n
1809 r.s =
0; // assumes a,this
>=
0
1810 while (--i
>=
0) r[i] =
0
1811 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1812 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1817 // Barrett modular reduction
1818 function Barrett(m) {
1820 this.r2 = new BigInteger()
1821 this.q3 = new BigInteger()
1822 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1823 this.mu = this.r2.divide(m)
1827 function barrettConvert(x) {
1828 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1829 else if (x.compareTo(this.m) <
0) return x
1831 var r = new BigInteger()
1838 function barrettRevert(x) {
1842 // x = x mod m (HAC
14.42)
1843 function barrettReduce(x) {
1845 x.drShiftTo(self.m.t -
1, self.r2)
1846 if (x.t
> self.m.t +
1) {
1850 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1851 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1852 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1854 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1857 // r = x^
2 mod m; x != r
1858 function barrettSqrTo(x, r) {
1863 // r = x*y mod m; x,y != r
1864 function barrettMulTo(x, y, r) {
1869 Barrett.prototype.convert = barrettConvert
1870 Barrett.prototype.revert = barrettRevert
1871 Barrett.prototype.reduce = barrettReduce
1872 Barrett.prototype.mulTo = barrettMulTo
1873 Barrett.prototype.sqrTo = barrettSqrTo
1875 // (public) this^e % m (HAC
14.85)
1876 function bnModPow(e, m) {
1877 var i = e.bitLength(),
1880 if (i <=
0) return r
1881 else if (i <
18) k =
1
1882 else if (i <
48) k =
3
1883 else if (i <
144) k =
4
1884 else if (i <
768) k =
5
1888 else if (m.isEven())
1891 z = new Montgomery(m)
1894 var g = new Array(),
1898 g[
1] = z.convert(this)
1900 var g2 = new BigInteger()
1903 g[n] = new BigInteger()
1904 z.mulTo(g2, g[n -
2], g[n])
1911 r2 = new BigInteger(),
1915 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1917 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1918 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1922 while ((w &
1) ==
0) {
1930 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1939 if (n
> 0) z.sqrTo(r, r2)
1945 z.mulTo(r2, g[w], r)
1948 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1962 // (public) gcd(this,a) (HAC
14.54)
1964 var x = (this.s <
0) ? this.negate() : this.clone()
1965 var y = (a.s <
0) ? a.negate() : a.clone()
1966 if (x.compareTo(y) <
0) {
1971 var i = x.getLowestSetBit(),
1972 g = y.getLowestSetBit()
1979 while (x.signum()
> 0) {
1980 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1981 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1982 if (x.compareTo(y)
>=
0) {
1990 if (g
> 0) y.lShiftTo(g, y)
1994 // (protected) this % n, n <
2^
26
1995 function bnpModInt(n) {
1996 if (n <=
0) return
0
1997 var d = this.DV % n,
1998 r = (this.s <
0) ? n -
1 :
0
2000 if (d ==
0) r = this[
0] % n
2002 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
2006 // (public)
1/this % m (HAC
14.61)
2007 function bnModInverse(m) {
2009 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
2016 while (u.signum() !=
0) {
2017 while (u.isEven()) {
2020 if (!a.isEven() || !b.isEven()) {
2025 } else if (!b.isEven()) b.subTo(m, b)
2028 while (v.isEven()) {
2031 if (!c.isEven() || !d.isEven()) {
2036 } else if (!d.isEven()) d.subTo(m, d)
2039 if (u.compareTo(v)
>=
0) {
2041 if (ac) a.subTo(c, a)
2045 if (ac) c.subTo(a, c)
2049 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2050 if (d.compareTo(m)
>=
0) return d.subtract(m)
2051 if (d.signum() <
0) d.addTo(m, d)
2053 if (d.signum() <
0) return d.add(m)
2058 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2059 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2060 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2061 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2062 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2063 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2064 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2065 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2066 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2067 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2068 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2071 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2073 // (public) test primality with certainty
>=
1-
.5^t
2074 function bnIsProbablePrime(t) {
2075 var i, x = this.abs()
2076 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2077 for (i =
0; i < lowprimes.length; ++i)
2078 if (x[
0] == lowprimes[i]) return true
2081 if (x.isEven()) return false
2083 while (i < lowprimes.length) {
2084 var m = lowprimes[i],
2086 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2088 while (i < j) if (m % lowprimes[i++] ==
0) return false
2090 return x.millerRabin(t)
2093 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2094 function bnpMillerRabin(t) {
2095 var n1 = this.subtract(BigInteger.ONE)
2096 var k = n1.getLowestSetBit()
2097 if (k <=
0) return false
2098 var r = n1.shiftRight(k)
2100 if (t
> lowprimes.length) t = lowprimes.length
2101 var a = new BigInteger(null)
2103 for (var i =
0; i < t; ++i) {
2105 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2106 if (bases.indexOf(j) == -
1) break
2110 var y = a.modPow(r, this)
2111 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2113 while (j++ < k && y.compareTo(n1) !=
0) {
2114 y = y.modPowInt(
2, this)
2115 if (y.compareTo(BigInteger.ONE) ==
0) return false
2117 if (y.compareTo(n1) !=
0) return false
2124 proto.chunkSize = bnpChunkSize
2125 proto.toRadix = bnpToRadix
2126 proto.fromRadix = bnpFromRadix
2127 proto.fromNumber = bnpFromNumber
2128 proto.bitwiseTo = bnpBitwiseTo
2129 proto.changeBit = bnpChangeBit
2130 proto.addTo = bnpAddTo
2131 proto.dMultiply = bnpDMultiply
2132 proto.dAddOffset = bnpDAddOffset
2133 proto.multiplyLowerTo = bnpMultiplyLowerTo
2134 proto.multiplyUpperTo = bnpMultiplyUpperTo
2135 proto.modInt = bnpModInt
2136 proto.millerRabin = bnpMillerRabin
2139 proto.clone = bnClone
2140 proto.intValue = bnIntValue
2141 proto.byteValue = bnByteValue
2142 proto.shortValue = bnShortValue
2143 proto.signum = bnSigNum
2144 proto.toByteArray = bnToByteArray
2145 proto.equals = bnEquals
2151 proto.andNot = bnAndNot
2153 proto.shiftLeft = bnShiftLeft
2154 proto.shiftRight = bnShiftRight
2155 proto.getLowestSetBit = bnGetLowestSetBit
2156 proto.bitCount = bnBitCount
2157 proto.testBit = bnTestBit
2158 proto.setBit = bnSetBit
2159 proto.clearBit = bnClearBit
2160 proto.flipBit = bnFlipBit
2162 proto.subtract = bnSubtract
2163 proto.multiply = bnMultiply
2164 proto.divide = bnDivide
2165 proto.remainder = bnRemainder
2166 proto.divideAndRemainder = bnDivideAndRemainder
2167 proto.modPow = bnModPow
2168 proto.modInverse = bnModInverse
2171 proto.isProbablePrime = bnIsProbablePrime
2173 // JSBN-specific extension
2174 proto.square = bnSquare
2177 BigInteger.ZERO = nbv(
0)
2178 BigInteger.ONE = nbv(
1)
2179 BigInteger.valueOf = nbv
2181 module.exports = BigInteger
2183 },{"../package.json":
4}],
2:[function(require,module,exports){
2185 // FIXME: Kind of a weird way to throw exceptions, consider removing
2186 var assert = require('assert')
2187 var BigInteger = require('./bigi')
2190 * Turns a byte array into a big integer.
2192 * This function will interpret a byte array as a big integer in big
2195 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2196 // BigInteger expects a DER integer conformant byte array
2197 if (byteArray[
0] &
0x80) {
2198 return new BigInteger([
0].concat(byteArray))
2201 return new BigInteger(byteArray)
2205 * Returns a byte array representation of the big integer.
2207 * This returns the absolute of the contained value in big endian
2208 * form. A value of zero results in an empty array.
2210 BigInteger.prototype.toByteArrayUnsigned = function() {
2211 var byteArray = this.toByteArray()
2212 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2215 BigInteger.fromDERInteger = function(byteArray) {
2216 return new BigInteger(byteArray)
2220 * Converts BigInteger to a DER integer representation.
2222 * The format for this value uses the most significant bit as a sign
2223 * bit. If the most significant bit is already set and the integer is
2224 * positive, a
0x00 is prepended.
2240 * -
62300 =
> 0xff0ca4
2242 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2244 BigInteger.fromBuffer = function(buffer) {
2245 // BigInteger expects a DER integer conformant byte array
2246 if (buffer[
0] &
0x80) {
2247 var byteArray = Array.prototype.slice.call(buffer)
2249 return new BigInteger([
0].concat(byteArray))
2252 return new BigInteger(buffer)
2255 BigInteger.fromHex = function(hex) {
2256 if (hex === '') return BigInteger.ZERO
2258 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2259 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2260 return new BigInteger(hex,
16)
2263 BigInteger.prototype.toBuffer = function(size) {
2264 var byteArray = this.toByteArrayUnsigned()
2267 var padding = size - byteArray.length
2268 while (zeros.length < padding) zeros.push(
0)
2270 return new Buffer(zeros.concat(byteArray))
2273 BigInteger.prototype.toHex = function(size) {
2274 return this.toBuffer(size).toString('hex')
2277 }).call(this,require(
"buffer").Buffer)
2278 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2279 var BigInteger = require('./bigi')
2282 require('./convert')
2284 module.exports = BigInteger
2285 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2289 "description":
"Big integers.",
2307 "devDependencies": {
2310 "coveralls":
"^2.10.0",
2311 "istanbul":
"^0.2.11"
2314 "url":
"https://github.com/cryptocoinjs/bigi",
2317 "main":
"./lib/index.js",
2319 "test":
"_mocha -- test/*.js",
2320 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2322 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2323 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2327 "files":
"test/*.js",
2333 "safari/6.0..latest",
2334 "iphone/6.0..latest",
2335 "android-browser/4.2..latest"
2339 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2341 "homepage":
"https://github.com/cryptocoinjs/bigi",
2342 "_id":
"bigi@1.4.0",
2344 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2345 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2347 "_from":
"bigi@^1.4.0",
2348 "_npmVersion":
"1.4.3",
2351 "email":
"jprichardson@gmail.com"
2356 "email":
"jprichardson@gmail.com"
2359 "name":
"midnightlightning",
2360 "email":
"boydb@midnightdesign.ws"
2363 "name":
"sidazhang",
2364 "email":
"sidazhang89@gmail.com"
2368 "email":
"npm@shesek.info"
2372 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2373 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2376 },{}],
5:[function(require,module,exports){
2377 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2379 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2381 // Originally from narwhal.js (http://narwhaljs.org)
2382 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2384 // Permission is hereby granted, free of charge, to any person obtaining a copy
2385 // of this software and associated documentation files (the 'Software'), to
2386 // deal in the Software without restriction, including without limitation the
2387 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2388 // sell copies of the Software, and to permit persons to whom the Software is
2389 // furnished to do so, subject to the following conditions:
2391 // The above copyright notice and this permission notice shall be included in
2392 // all copies or substantial portions of the Software.
2394 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2395 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2396 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2397 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2398 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2399 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2401 // when used in node, this will actually load the util module we depend on
2402 // versus loading the builtin util module as happens otherwise
2403 // this is a bug in node module loading as far as I am concerned
2404 var util = require('util/');
2406 var pSlice = Array.prototype.slice;
2407 var hasOwn = Object.prototype.hasOwnProperty;
2409 //
1. The assert module provides functions that throw
2410 // AssertionError's when particular conditions are not met. The
2411 // assert module must conform to the following interface.
2413 var assert = module.exports = ok;
2415 //
2. The AssertionError is defined in assert.
2416 // new assert.AssertionError({ message: message,
2418 // expected: expected })
2420 assert.AssertionError = function AssertionError(options) {
2421 this.name = 'AssertionError';
2422 this.actual = options.actual;
2423 this.expected = options.expected;
2424 this.operator = options.operator;
2425 if (options.message) {
2426 this.message = options.message;
2427 this.generatedMessage = false;
2429 this.message = getMessage(this);
2430 this.generatedMessage = true;
2432 var stackStartFunction = options.stackStartFunction || fail;
2434 if (Error.captureStackTrace) {
2435 Error.captureStackTrace(this, stackStartFunction);
2438 // non v8 browsers so we can have a stacktrace
2439 var err = new Error();
2441 var out = err.stack;
2443 // try to strip useless frames
2444 var fn_name = stackStartFunction.name;
2445 var idx = out.indexOf('\n' + fn_name);
2447 // once we have located the function frame
2448 // we need to strip out everything before it (and its line)
2449 var next_line = out.indexOf('\n', idx +
1);
2450 out = out.substring(next_line +
1);
2458 // assert.AssertionError instanceof Error
2459 util.inherits(assert.AssertionError, Error);
2461 function replacer(key, value) {
2462 if (util.isUndefined(value)) {
2465 if (util.isNumber(value) && !isFinite(value)) {
2466 return value.toString();
2468 if (util.isFunction(value) || util.isRegExp(value)) {
2469 return value.toString();
2474 function truncate(s, n) {
2475 if (util.isString(s)) {
2476 return s.length < n ? s : s.slice(
0, n);
2482 function getMessage(self) {
2483 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2484 self.operator + ' ' +
2485 truncate(JSON.stringify(self.expected, replacer),
128);
2488 // At present only the three keys mentioned above are used and
2489 // understood by the spec. Implementations or sub modules can pass
2490 // other keys to the AssertionError's constructor - they will be
2493 //
3. All of the following functions must throw an AssertionError
2494 // when a corresponding condition is not met, with a message that
2495 // may be undefined if not provided. All assertion methods provide
2496 // both the actual and expected values to the assertion error for
2497 // display purposes.
2499 function fail(actual, expected, message, operator, stackStartFunction) {
2500 throw new assert.AssertionError({
2505 stackStartFunction: stackStartFunction
2509 // EXTENSION! allows for well behaved errors defined elsewhere.
2512 //
4. Pure assertion tests whether a value is truthy, as determined
2514 // assert.ok(guard, message_opt);
2515 // This statement is equivalent to assert.equal(true, !!guard,
2516 // message_opt);. To test strictly for the value true, use
2517 // assert.strictEqual(true, guard, message_opt);.
2519 function ok(value, message) {
2520 if (!value) fail(value, true, message, '==', assert.ok);
2524 //
5. The equality assertion tests shallow, coercive equality with
2526 // assert.equal(actual, expected, message_opt);
2528 assert.equal = function equal(actual, expected, message) {
2529 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2532 //
6. The non-equality assertion tests for whether two objects are not equal
2533 // with != assert.notEqual(actual, expected, message_opt);
2535 assert.notEqual = function notEqual(actual, expected, message) {
2536 if (actual == expected) {
2537 fail(actual, expected, message, '!=', assert.notEqual);
2541 //
7. The equivalence assertion tests a deep equality relation.
2542 // assert.deepEqual(actual, expected, message_opt);
2544 assert.deepEqual = function deepEqual(actual, expected, message) {
2545 if (!_deepEqual(actual, expected)) {
2546 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2550 function _deepEqual(actual, expected) {
2551 //
7.1. All identical values are equivalent, as determined by ===.
2552 if (actual === expected) {
2555 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2556 if (actual.length != expected.length) return false;
2558 for (var i =
0; i < actual.length; i++) {
2559 if (actual[i] !== expected[i]) return false;
2564 //
7.2. If the expected value is a Date object, the actual value is
2565 // equivalent if it is also a Date object that refers to the same time.
2566 } else if (util.isDate(actual) && util.isDate(expected)) {
2567 return actual.getTime() === expected.getTime();
2569 //
7.3 If the expected value is a RegExp object, the actual value is
2570 // equivalent if it is also a RegExp object with the same source and
2571 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2572 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2573 return actual.source === expected.source &&
2574 actual.global === expected.global &&
2575 actual.multiline === expected.multiline &&
2576 actual.lastIndex === expected.lastIndex &&
2577 actual.ignoreCase === expected.ignoreCase;
2579 //
7.4. Other pairs that do not both pass typeof value == 'object',
2580 // equivalence is determined by ==.
2581 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2582 return actual == expected;
2584 //
7.5 For all other Object pairs, including Array objects, equivalence is
2585 // determined by having the same number of owned properties (as verified
2586 // with Object.prototype.hasOwnProperty.call), the same set of keys
2587 // (although not necessarily the same order), equivalent values for every
2588 // corresponding key, and an identical 'prototype' property. Note: this
2589 // accounts for both named and indexed properties on Arrays.
2591 return objEquiv(actual, expected);
2595 function isArguments(object) {
2596 return Object.prototype.toString.call(object) == '[object Arguments]';
2599 function objEquiv(a, b) {
2600 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2602 // an identical 'prototype' property.
2603 if (a.prototype !== b.prototype) return false;
2604 // if one is a primitive, the other must be same
2605 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2608 var aIsArgs = isArguments(a),
2609 bIsArgs = isArguments(b);
2610 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2615 return _deepEqual(a, b);
2617 var ka = objectKeys(a),
2620 // having the same number of owned properties (keys incorporates
2622 if (ka.length != kb.length)
2624 //the same set of keys (although not necessarily the same order),
2628 for (i = ka.length -
1; i
>=
0; i--) {
2632 //equivalent values for every corresponding key, and
2633 //~~~possibly expensive deep test
2634 for (i = ka.length -
1; i
>=
0; i--) {
2636 if (!_deepEqual(a[key], b[key])) return false;
2641 //
8. The non-equivalence assertion tests for any deep inequality.
2642 // assert.notDeepEqual(actual, expected, message_opt);
2644 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2645 if (_deepEqual(actual, expected)) {
2646 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2650 //
9. The strict equality assertion tests strict equality, as determined by ===.
2651 // assert.strictEqual(actual, expected, message_opt);
2653 assert.strictEqual = function strictEqual(actual, expected, message) {
2654 if (actual !== expected) {
2655 fail(actual, expected, message, '===', assert.strictEqual);
2659 //
10. The strict non-equality assertion tests for strict inequality, as
2660 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2662 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2663 if (actual === expected) {
2664 fail(actual, expected, message, '!==', assert.notStrictEqual);
2668 function expectedException(actual, expected) {
2669 if (!actual || !expected) {
2673 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2674 return expected.test(actual);
2675 } else if (actual instanceof expected) {
2677 } else if (expected.call({}, actual) === true) {
2684 function _throws(shouldThrow, block, expected, message) {
2687 if (util.isString(expected)) {
2698 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2699 (message ? ' ' + message : '.');
2701 if (shouldThrow && !actual) {
2702 fail(actual, expected, 'Missing expected exception' + message);
2705 if (!shouldThrow && expectedException(actual, expected)) {
2706 fail(actual, expected, 'Got unwanted exception' + message);
2709 if ((shouldThrow && actual && expected &&
2710 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2715 //
11. Expected to throw an error:
2716 // assert.throws(block, Error_opt, message_opt);
2718 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2719 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2722 // EXTENSION! This is annoying to write outside this module.
2723 assert.doesNotThrow = function(block, /*optional*/message) {
2724 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2727 assert.ifError = function(err) { if (err) {throw err;}};
2729 var objectKeys = Object.keys || function (obj) {
2731 for (var key in obj) {
2732 if (hasOwn.call(obj, key)) keys.push(key);
2737 },{"util/":
29}],
6:[function(require,module,exports){
2739 },{}],
7:[function(require,module,exports){
2741 * The buffer module from node.js, for the browser.
2743 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2747 var base64 = require('base64-js')
2748 var ieee754 = require('ieee754')
2749 var isArray = require('is-array')
2751 exports.Buffer = Buffer
2752 exports.SlowBuffer = SlowBuffer
2753 exports.INSPECT_MAX_BYTES =
50
2754 Buffer.poolSize =
8192 // not used by this implementation
2759 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2760 * === true Use Uint8Array implementation (fastest)
2761 * === false Use Object implementation (most compatible, even IE6)
2763 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2764 * Opera
11.6+, iOS
4.2+.
2766 * Due to various browser bugs, sometimes the Object implementation will be used even
2767 * when the browser supports typed arrays.
2771 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2772 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2774 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2777 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2779 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2780 * incorrect length in some situations.
2782 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2783 * get the Object implementation, which is slower but behaves correctly.
2785 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2788 var arr = new Uint8Array(
1)
2789 arr.foo = function () { return
42 }
2790 arr.constructor = Bar
2791 return arr.foo() ===
42 && // typed array instances can be augmented
2792 arr.constructor === Bar && // constructor can be set
2793 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2794 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2800 function kMaxLength () {
2801 return Buffer.TYPED_ARRAY_SUPPORT
2810 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2811 * with function properties for all the node `Buffer` API functions. We use
2812 * `Uint8Array` so that square bracket notation works as expected -- it returns
2815 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2818 function Buffer (arg) {
2819 if (!(this instanceof Buffer)) {
2820 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2821 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2822 return new Buffer(arg)
2826 this.parent = undefined
2829 if (typeof arg === 'number') {
2830 return fromNumber(this, arg)
2833 // Slightly less common case.
2834 if (typeof arg === 'string') {
2835 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2839 return fromObject(this, arg)
2842 function fromNumber (that, length) {
2843 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2844 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2845 for (var i =
0; i < length; i++) {
2852 function fromString (that, string, encoding) {
2853 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2855 // Assumption: byteLength() return value is always < kMaxLength.
2856 var length = byteLength(string, encoding) |
0
2857 that = allocate(that, length)
2859 that.write(string, encoding)
2863 function fromObject (that, object) {
2864 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2866 if (isArray(object)) return fromArray(that, object)
2868 if (object == null) {
2869 throw new TypeError('must start with number, buffer, array or string')
2872 if (typeof ArrayBuffer !== 'undefined') {
2873 if (object.buffer instanceof ArrayBuffer) {
2874 return fromTypedArray(that, object)
2876 if (object instanceof ArrayBuffer) {
2877 return fromArrayBuffer(that, object)
2881 if (object.length) return fromArrayLike(that, object)
2883 return fromJsonObject(that, object)
2886 function fromBuffer (that, buffer) {
2887 var length = checked(buffer.length) |
0
2888 that = allocate(that, length)
2889 buffer.copy(that,
0,
0, length)
2893 function fromArray (that, array) {
2894 var length = checked(array.length) |
0
2895 that = allocate(that, length)
2896 for (var i =
0; i < length; i +=
1) {
2897 that[i] = array[i] &
255
2902 // Duplicate of fromArray() to keep fromArray() monomorphic.
2903 function fromTypedArray (that, array) {
2904 var length = checked(array.length) |
0
2905 that = allocate(that, length)
2906 // Truncating the elements is probably not what people expect from typed
2907 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2908 // of the old Buffer constructor.
2909 for (var i =
0; i < length; i +=
1) {
2910 that[i] = array[i] &
255
2915 function fromArrayBuffer (that, array) {
2916 if (Buffer.TYPED_ARRAY_SUPPORT) {
2917 // Return an augmented `Uint8Array` instance, for best performance
2919 that = Buffer._augment(new Uint8Array(array))
2921 // Fallback: Return an object instance of the Buffer class
2922 that = fromTypedArray(that, new Uint8Array(array))
2927 function fromArrayLike (that, array) {
2928 var length = checked(array.length) |
0
2929 that = allocate(that, length)
2930 for (var i =
0; i < length; i +=
1) {
2931 that[i] = array[i] &
255
2936 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2937 // Returns a zero-length buffer for inputs that don't conform to the spec.
2938 function fromJsonObject (that, object) {
2942 if (object.type === 'Buffer' && isArray(object.data)) {
2944 length = checked(array.length) |
0
2946 that = allocate(that, length)
2948 for (var i =
0; i < length; i +=
1) {
2949 that[i] = array[i] &
255
2954 function allocate (that, length) {
2955 if (Buffer.TYPED_ARRAY_SUPPORT) {
2956 // Return an augmented `Uint8Array` instance, for best performance
2957 that = Buffer._augment(new Uint8Array(length))
2959 // Fallback: Return an object instance of the Buffer class
2960 that.length = length
2961 that._isBuffer = true
2964 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2965 if (fromPool) that.parent = rootParent
2970 function checked (length) {
2971 // Note: cannot use `length < kMaxLength` here because that fails when
2972 // length is NaN (which is otherwise coerced to zero.)
2973 if (length
>= kMaxLength()) {
2974 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2975 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2980 function SlowBuffer (subject, encoding) {
2981 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2983 var buf = new Buffer(subject, encoding)
2988 Buffer.isBuffer = function isBuffer (b) {
2989 return !!(b != null && b._isBuffer)
2992 Buffer.compare = function compare (a, b) {
2993 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2994 throw new TypeError('Arguments must be Buffers')
2997 if (a === b) return
0
3003 var len = Math.min(x, y)
3005 if (a[i] !== b[i]) break
3015 if (x < y) return -
1
3020 Buffer.isEncoding = function isEncoding (encoding) {
3021 switch (String(encoding).toLowerCase()) {
3039 Buffer.concat = function concat (list, length) {
3040 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3042 if (list.length ===
0) {
3043 return new Buffer(
0)
3047 if (length === undefined) {
3049 for (i =
0; i < list.length; i++) {
3050 length += list[i].length
3054 var buf = new Buffer(length)
3056 for (i =
0; i < list.length; i++) {
3064 function byteLength (string, encoding) {
3065 if (typeof string !== 'string') string = '' + string
3067 var len = string.length
3068 if (len ===
0) return
0
3070 // Use a for loop to avoid recursion
3071 var loweredCase = false
3082 return utf8ToBytes(string).length
3091 return base64ToBytes(string).length
3093 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3094 encoding = ('' + encoding).toLowerCase()
3099 Buffer.byteLength = byteLength
3101 // pre-set for values that may exist in the future
3102 Buffer.prototype.length = undefined
3103 Buffer.prototype.parent = undefined
3105 function slowToString (encoding, start, end) {
3106 var loweredCase = false
3109 end = end === undefined || end === Infinity ? this.length : end |
0
3111 if (!encoding) encoding = 'utf8'
3112 if (start <
0) start =
0
3113 if (end
> this.length) end = this.length
3114 if (end <= start) return ''
3119 return hexSlice(this, start, end)
3123 return utf8Slice(this, start, end)
3126 return asciiSlice(this, start, end)
3129 return binarySlice(this, start, end)
3132 return base64Slice(this, start, end)
3138 return utf16leSlice(this, start, end)
3141 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3142 encoding = (encoding + '').toLowerCase()
3148 Buffer.prototype.toString = function toString () {
3149 var length = this.length |
0
3150 if (length ===
0) return ''
3151 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3152 return slowToString.apply(this, arguments)
3155 Buffer.prototype.equals = function equals (b) {
3156 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3157 if (this === b) return true
3158 return Buffer.compare(this, b) ===
0
3161 Buffer.prototype.inspect = function inspect () {
3163 var max = exports.INSPECT_MAX_BYTES
3164 if (this.length
> 0) {
3165 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3166 if (this.length
> max) str += ' ... '
3168 return '
<Buffer ' + str + '
>'
3171 Buffer.prototype.compare = function compare (b) {
3172 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3173 if (this === b) return
0
3174 return Buffer.compare(this, b)
3177 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3178 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3179 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3182 if (this.length ===
0) return -
1
3183 if (byteOffset
>= this.length) return -
1
3185 // Negative offsets start from the end of the buffer
3186 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3188 if (typeof val === 'string') {
3189 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3190 return String.prototype.indexOf.call(this, val, byteOffset)
3192 if (Buffer.isBuffer(val)) {
3193 return arrayIndexOf(this, val, byteOffset)
3195 if (typeof val === 'number') {
3196 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3197 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3199 return arrayIndexOf(this, [ val ], byteOffset)
3202 function arrayIndexOf (arr, val, byteOffset) {
3204 for (var i =
0; byteOffset + i < arr.length; i++) {
3205 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3206 if (foundIndex === -
1) foundIndex = i
3207 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3215 throw new TypeError('val must be string, number or Buffer')
3218 // `get` is deprecated
3219 Buffer.prototype.get = function get (offset) {
3220 console.log('.get() is deprecated. Access using array indexes instead.')
3221 return this.readUInt8(offset)
3224 // `set` is deprecated
3225 Buffer.prototype.set = function set (v, offset) {
3226 console.log('.set() is deprecated. Access using array indexes instead.')
3227 return this.writeUInt8(v, offset)
3230 function hexWrite (buf, string, offset, length) {
3231 offset = Number(offset) ||
0
3232 var remaining = buf.length - offset
3236 length = Number(length)
3237 if (length
> remaining) {
3242 // must be an even number of digits
3243 var strLen = string.length
3244 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3246 if (length
> strLen /
2) {
3249 for (var i =
0; i < length; i++) {
3250 var parsed = parseInt(string.substr(i *
2,
2),
16)
3251 if (isNaN(parsed)) throw new Error('Invalid hex string')
3252 buf[offset + i] = parsed
3257 function utf8Write (buf, string, offset, length) {
3258 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3261 function asciiWrite (buf, string, offset, length) {
3262 return blitBuffer(asciiToBytes(string), buf, offset, length)
3265 function binaryWrite (buf, string, offset, length) {
3266 return asciiWrite(buf, string, offset, length)
3269 function base64Write (buf, string, offset, length) {
3270 return blitBuffer(base64ToBytes(string), buf, offset, length)
3273 function ucs2Write (buf, string, offset, length) {
3274 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3277 Buffer.prototype.write = function write (string, offset, length, encoding) {
3278 // Buffer#write(string)
3279 if (offset === undefined) {
3281 length = this.length
3283 // Buffer#write(string, encoding)
3284 } else if (length === undefined && typeof offset === 'string') {
3286 length = this.length
3288 // Buffer#write(string, offset[, length][, encoding])
3289 } else if (isFinite(offset)) {
3291 if (isFinite(length)) {
3293 if (encoding === undefined) encoding = 'utf8'
3298 // legacy write(string, encoding, offset, length) - remove in v0.13
3306 var remaining = this.length - offset
3307 if (length === undefined || length
> remaining) length = remaining
3309 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3310 throw new RangeError('attempt to write outside buffer bounds')
3313 if (!encoding) encoding = 'utf8'
3315 var loweredCase = false
3319 return hexWrite(this, string, offset, length)
3323 return utf8Write(this, string, offset, length)
3326 return asciiWrite(this, string, offset, length)
3329 return binaryWrite(this, string, offset, length)
3332 // Warning: maxLength not taken into account in base64Write
3333 return base64Write(this, string, offset, length)
3339 return ucs2Write(this, string, offset, length)
3342 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3343 encoding = ('' + encoding).toLowerCase()
3349 Buffer.prototype.toJSON = function toJSON () {
3352 data: Array.prototype.slice.call(this._arr || this,
0)
3356 function base64Slice (buf, start, end) {
3357 if (start ===
0 && end === buf.length) {
3358 return base64.fromByteArray(buf)
3360 return base64.fromByteArray(buf.slice(start, end))
3364 function utf8Slice (buf, start, end) {
3365 end = Math.min(buf.length, end)
3370 var bytesPerSequence
3376 for (; i < end; i += bytesPerSequence) {
3380 if (firstByte
> 0xEF) {
3381 bytesPerSequence =
4
3382 } else if (firstByte
> 0xDF) {
3383 bytesPerSequence =
3
3384 } else if (firstByte
> 0xBF) {
3385 bytesPerSequence =
2
3387 bytesPerSequence =
1
3390 if (i + bytesPerSequence <= end) {
3391 switch (bytesPerSequence) {
3393 if (firstByte <
0x80) {
3394 codePoint = firstByte
3398 secondByte = buf[i +
1]
3399 if ((secondByte &
0xC0) ===
0x80) {
3400 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3401 if (tempCodePoint
> 0x7F) {
3402 codePoint = tempCodePoint
3407 secondByte = buf[i +
1]
3408 thirdByte = buf[i +
2]
3409 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3410 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3411 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3412 codePoint = tempCodePoint
3417 secondByte = buf[i +
1]
3418 thirdByte = buf[i +
2]
3419 fourthByte = buf[i +
3]
3420 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3421 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3422 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3423 codePoint = tempCodePoint
3429 if (codePoint ===
0xFFFD) {
3430 // we generated an invalid codePoint so make sure to only advance by
1 byte
3431 bytesPerSequence =
1
3432 } else if (codePoint
> 0xFFFF) {
3433 // encode to utf16 (surrogate pair dance)
3434 codePoint -=
0x10000
3435 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3436 codePoint =
0xDC00 | codePoint &
0x3FF
3442 return String.fromCharCode.apply(String, res)
3445 function asciiSlice (buf, start, end) {
3447 end = Math.min(buf.length, end)
3449 for (var i = start; i < end; i++) {
3450 ret += String.fromCharCode(buf[i] &
0x7F)
3455 function binarySlice (buf, start, end) {
3457 end = Math.min(buf.length, end)
3459 for (var i = start; i < end; i++) {
3460 ret += String.fromCharCode(buf[i])
3465 function hexSlice (buf, start, end) {
3466 var len = buf.length
3468 if (!start || start <
0) start =
0
3469 if (!end || end <
0 || end
> len) end = len
3472 for (var i = start; i < end; i++) {
3473 out += toHex(buf[i])
3478 function utf16leSlice (buf, start, end) {
3479 var bytes = buf.slice(start, end)
3481 for (var i =
0; i < bytes.length; i +=
2) {
3482 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3487 Buffer.prototype.slice = function slice (start, end) {
3488 var len = this.length
3490 end = end === undefined ? len : ~~end
3494 if (start <
0) start =
0
3495 } else if (start
> len) {
3501 if (end <
0) end =
0
3502 } else if (end
> len) {
3506 if (end < start) end = start
3509 if (Buffer.TYPED_ARRAY_SUPPORT) {
3510 newBuf = Buffer._augment(this.subarray(start, end))
3512 var sliceLen = end - start
3513 newBuf = new Buffer(sliceLen, undefined)
3514 for (var i =
0; i < sliceLen; i++) {
3515 newBuf[i] = this[i + start]
3519 if (newBuf.length) newBuf.parent = this.parent || this
3525 * Need to make sure that buffer isn't trying to write out of bounds.
3527 function checkOffset (offset, ext, length) {
3528 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3529 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3532 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3534 byteLength = byteLength |
0
3535 if (!noAssert) checkOffset(offset, byteLength, this.length)
3537 var val = this[offset]
3540 while (++i < byteLength && (mul *=
0x100)) {
3541 val += this[offset + i] * mul
3547 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3549 byteLength = byteLength |
0
3551 checkOffset(offset, byteLength, this.length)
3554 var val = this[offset + --byteLength]
3556 while (byteLength
> 0 && (mul *=
0x100)) {
3557 val += this[offset + --byteLength] * mul
3563 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3564 if (!noAssert) checkOffset(offset,
1, this.length)
3568 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3569 if (!noAssert) checkOffset(offset,
2, this.length)
3570 return this[offset] | (this[offset +
1] <<
8)
3573 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3574 if (!noAssert) checkOffset(offset,
2, this.length)
3575 return (this[offset] <<
8) | this[offset +
1]
3578 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3579 if (!noAssert) checkOffset(offset,
4, this.length)
3581 return ((this[offset]) |
3582 (this[offset +
1] <<
8) |
3583 (this[offset +
2] <<
16)) +
3584 (this[offset +
3] *
0x1000000)
3587 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3588 if (!noAssert) checkOffset(offset,
4, this.length)
3590 return (this[offset] *
0x1000000) +
3591 ((this[offset +
1] <<
16) |
3592 (this[offset +
2] <<
8) |
3596 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3598 byteLength = byteLength |
0
3599 if (!noAssert) checkOffset(offset, byteLength, this.length)
3601 var val = this[offset]
3604 while (++i < byteLength && (mul *=
0x100)) {
3605 val += this[offset + i] * mul
3609 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3614 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3616 byteLength = byteLength |
0
3617 if (!noAssert) checkOffset(offset, byteLength, this.length)
3621 var val = this[offset + --i]
3622 while (i
> 0 && (mul *=
0x100)) {
3623 val += this[offset + --i] * mul
3627 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3632 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3633 if (!noAssert) checkOffset(offset,
1, this.length)
3634 if (!(this[offset] &
0x80)) return (this[offset])
3635 return ((
0xff - this[offset] +
1) * -
1)
3638 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3639 if (!noAssert) checkOffset(offset,
2, this.length)
3640 var val = this[offset] | (this[offset +
1] <<
8)
3641 return (val &
0x8000) ? val |
0xFFFF0000 : val
3644 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3645 if (!noAssert) checkOffset(offset,
2, this.length)
3646 var val = this[offset +
1] | (this[offset] <<
8)
3647 return (val &
0x8000) ? val |
0xFFFF0000 : val
3650 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3651 if (!noAssert) checkOffset(offset,
4, this.length)
3653 return (this[offset]) |
3654 (this[offset +
1] <<
8) |
3655 (this[offset +
2] <<
16) |
3656 (this[offset +
3] <<
24)
3659 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3660 if (!noAssert) checkOffset(offset,
4, this.length)
3662 return (this[offset] <<
24) |
3663 (this[offset +
1] <<
16) |
3664 (this[offset +
2] <<
8) |
3668 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3669 if (!noAssert) checkOffset(offset,
4, this.length)
3670 return ieee754.read(this, offset, true,
23,
4)
3673 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3674 if (!noAssert) checkOffset(offset,
4, this.length)
3675 return ieee754.read(this, offset, false,
23,
4)
3678 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3679 if (!noAssert) checkOffset(offset,
8, this.length)
3680 return ieee754.read(this, offset, true,
52,
8)
3683 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3684 if (!noAssert) checkOffset(offset,
8, this.length)
3685 return ieee754.read(this, offset, false,
52,
8)
3688 function checkInt (buf, value, offset, ext, max, min) {
3689 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3690 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3691 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3694 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3697 byteLength = byteLength |
0
3698 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3702 this[offset] = value &
0xFF
3703 while (++i < byteLength && (mul *=
0x100)) {
3704 this[offset + i] = (value / mul) &
0xFF
3707 return offset + byteLength
3710 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3713 byteLength = byteLength |
0
3714 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3716 var i = byteLength -
1
3718 this[offset + i] = value &
0xFF
3719 while (--i
>=
0 && (mul *=
0x100)) {
3720 this[offset + i] = (value / mul) &
0xFF
3723 return offset + byteLength
3726 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3729 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3730 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3731 this[offset] = value
3735 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3736 if (value <
0) value =
0xffff + value +
1
3737 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3738 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3739 (littleEndian ? i :
1 - i) *
8
3743 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3746 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3747 if (Buffer.TYPED_ARRAY_SUPPORT) {
3748 this[offset] = value
3749 this[offset +
1] = (value
>>> 8)
3751 objectWriteUInt16(this, value, offset, true)
3756 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3759 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3760 if (Buffer.TYPED_ARRAY_SUPPORT) {
3761 this[offset] = (value
>>> 8)
3762 this[offset +
1] = value
3764 objectWriteUInt16(this, value, offset, false)
3769 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3770 if (value <
0) value =
0xffffffff + value +
1
3771 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3772 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3776 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3779 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3780 if (Buffer.TYPED_ARRAY_SUPPORT) {
3781 this[offset +
3] = (value
>>> 24)
3782 this[offset +
2] = (value
>>> 16)
3783 this[offset +
1] = (value
>>> 8)
3784 this[offset] = value
3786 objectWriteUInt32(this, value, offset, true)
3791 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3794 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3795 if (Buffer.TYPED_ARRAY_SUPPORT) {
3796 this[offset] = (value
>>> 24)
3797 this[offset +
1] = (value
>>> 16)
3798 this[offset +
2] = (value
>>> 8)
3799 this[offset +
3] = value
3801 objectWriteUInt32(this, value, offset, false)
3806 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3810 var limit = Math.pow(
2,
8 * byteLength -
1)
3812 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3817 var sub = value <
0 ?
1 :
0
3818 this[offset] = value &
0xFF
3819 while (++i < byteLength && (mul *=
0x100)) {
3820 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3823 return offset + byteLength
3826 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3830 var limit = Math.pow(
2,
8 * byteLength -
1)
3832 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3835 var i = byteLength -
1
3837 var sub = value <
0 ?
1 :
0
3838 this[offset + i] = value &
0xFF
3839 while (--i
>=
0 && (mul *=
0x100)) {
3840 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3843 return offset + byteLength
3846 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3849 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3850 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3851 if (value <
0) value =
0xff + value +
1
3852 this[offset] = value
3856 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3859 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3860 if (Buffer.TYPED_ARRAY_SUPPORT) {
3861 this[offset] = value
3862 this[offset +
1] = (value
>>> 8)
3864 objectWriteUInt16(this, value, offset, true)
3869 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3872 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3873 if (Buffer.TYPED_ARRAY_SUPPORT) {
3874 this[offset] = (value
>>> 8)
3875 this[offset +
1] = value
3877 objectWriteUInt16(this, value, offset, false)
3882 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3885 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3886 if (Buffer.TYPED_ARRAY_SUPPORT) {
3887 this[offset] = value
3888 this[offset +
1] = (value
>>> 8)
3889 this[offset +
2] = (value
>>> 16)
3890 this[offset +
3] = (value
>>> 24)
3892 objectWriteUInt32(this, value, offset, true)
3897 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3900 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3901 if (value <
0) value =
0xffffffff + value +
1
3902 if (Buffer.TYPED_ARRAY_SUPPORT) {
3903 this[offset] = (value
>>> 24)
3904 this[offset +
1] = (value
>>> 16)
3905 this[offset +
2] = (value
>>> 8)
3906 this[offset +
3] = value
3908 objectWriteUInt32(this, value, offset, false)
3913 function checkIEEE754 (buf, value, offset, ext, max, min) {
3914 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3915 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3916 if (offset <
0) throw new RangeError('index out of range')
3919 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3921 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3923 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3927 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3928 return writeFloat(this, value, offset, true, noAssert)
3931 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3932 return writeFloat(this, value, offset, false, noAssert)
3935 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3937 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3939 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3943 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3944 return writeDouble(this, value, offset, true, noAssert)
3947 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3948 return writeDouble(this, value, offset, false, noAssert)
3951 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3952 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3953 if (!start) start =
0
3954 if (!end && end !==
0) end = this.length
3955 if (targetStart
>= target.length) targetStart = target.length
3956 if (!targetStart) targetStart =
0
3957 if (end
> 0 && end < start) end = start
3959 // Copy
0 bytes; we're done
3960 if (end === start) return
0
3961 if (target.length ===
0 || this.length ===
0) return
0
3963 // Fatal error conditions
3964 if (targetStart <
0) {
3965 throw new RangeError('targetStart out of bounds')
3967 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3968 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3971 if (end
> this.length) end = this.length
3972 if (target.length - targetStart < end - start) {
3973 end = target.length - targetStart + start
3976 var len = end - start
3979 if (this === target && start < targetStart && targetStart < end) {
3980 // descending copy from end
3981 for (i = len -
1; i
>=
0; i--) {
3982 target[i + targetStart] = this[i + start]
3984 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3985 // ascending copy from start
3986 for (i =
0; i < len; i++) {
3987 target[i + targetStart] = this[i + start]
3990 target._set(this.subarray(start, start + len), targetStart)
3996 // fill(value, start=
0, end=buffer.length)
3997 Buffer.prototype.fill = function fill (value, start, end) {
3998 if (!value) value =
0
3999 if (!start) start =
0
4000 if (!end) end = this.length
4002 if (end < start) throw new RangeError('end < start')
4004 // Fill
0 bytes; we're done
4005 if (end === start) return
4006 if (this.length ===
0) return
4008 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
4009 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
4012 if (typeof value === 'number') {
4013 for (i = start; i < end; i++) {
4017 var bytes = utf8ToBytes(value.toString())
4018 var len = bytes.length
4019 for (i = start; i < end; i++) {
4020 this[i] = bytes[i % len]
4028 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4029 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
4031 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4032 if (typeof Uint8Array !== 'undefined') {
4033 if (Buffer.TYPED_ARRAY_SUPPORT) {
4034 return (new Buffer(this)).buffer
4036 var buf = new Uint8Array(this.length)
4037 for (var i =
0, len = buf.length; i < len; i +=
1) {
4043 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4050 var BP = Buffer.prototype
4053 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4055 Buffer._augment = function _augment (arr) {
4056 arr.constructor = Buffer
4057 arr._isBuffer = true
4059 // save reference to original Uint8Array set method before overwriting
4066 arr.write = BP.write
4067 arr.toString = BP.toString
4068 arr.toLocaleString = BP.toString
4069 arr.toJSON = BP.toJSON
4070 arr.equals = BP.equals
4071 arr.compare = BP.compare
4072 arr.indexOf = BP.indexOf
4074 arr.slice = BP.slice
4075 arr.readUIntLE = BP.readUIntLE
4076 arr.readUIntBE = BP.readUIntBE
4077 arr.readUInt8 = BP.readUInt8
4078 arr.readUInt16LE = BP.readUInt16LE
4079 arr.readUInt16BE = BP.readUInt16BE
4080 arr.readUInt32LE = BP.readUInt32LE
4081 arr.readUInt32BE = BP.readUInt32BE
4082 arr.readIntLE = BP.readIntLE
4083 arr.readIntBE = BP.readIntBE
4084 arr.readInt8 = BP.readInt8
4085 arr.readInt16LE = BP.readInt16LE
4086 arr.readInt16BE = BP.readInt16BE
4087 arr.readInt32LE = BP.readInt32LE
4088 arr.readInt32BE = BP.readInt32BE
4089 arr.readFloatLE = BP.readFloatLE
4090 arr.readFloatBE = BP.readFloatBE
4091 arr.readDoubleLE = BP.readDoubleLE
4092 arr.readDoubleBE = BP.readDoubleBE
4093 arr.writeUInt8 = BP.writeUInt8
4094 arr.writeUIntLE = BP.writeUIntLE
4095 arr.writeUIntBE = BP.writeUIntBE
4096 arr.writeUInt16LE = BP.writeUInt16LE
4097 arr.writeUInt16BE = BP.writeUInt16BE
4098 arr.writeUInt32LE = BP.writeUInt32LE
4099 arr.writeUInt32BE = BP.writeUInt32BE
4100 arr.writeIntLE = BP.writeIntLE
4101 arr.writeIntBE = BP.writeIntBE
4102 arr.writeInt8 = BP.writeInt8
4103 arr.writeInt16LE = BP.writeInt16LE
4104 arr.writeInt16BE = BP.writeInt16BE
4105 arr.writeInt32LE = BP.writeInt32LE
4106 arr.writeInt32BE = BP.writeInt32BE
4107 arr.writeFloatLE = BP.writeFloatLE
4108 arr.writeFloatBE = BP.writeFloatBE
4109 arr.writeDoubleLE = BP.writeDoubleLE
4110 arr.writeDoubleBE = BP.writeDoubleBE
4112 arr.inspect = BP.inspect
4113 arr.toArrayBuffer = BP.toArrayBuffer
4118 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4120 function base64clean (str) {
4121 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4122 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4123 // Node converts strings with length <
2 to ''
4124 if (str.length <
2) return ''
4125 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4126 while (str.length %
4 !==
0) {
4132 function stringtrim (str) {
4133 if (str.trim) return str.trim()
4134 return str.replace(/^\s+|\s+$/g, '')
4137 function toHex (n) {
4138 if (n <
16) return '
0' + n.toString(
16)
4139 return n.toString(
16)
4142 function utf8ToBytes (string, units) {
4143 units = units || Infinity
4145 var length = string.length
4146 var leadSurrogate = null
4149 for (var i =
0; i < length; i++) {
4150 codePoint = string.charCodeAt(i)
4152 // is surrogate component
4153 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4154 // last char was a lead
4155 if (!leadSurrogate) {
4157 if (codePoint
> 0xDBFF) {
4159 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4162 } else if (i +
1 === length) {
4164 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4169 leadSurrogate = codePoint
4175 if (codePoint <
0xDC00) {
4176 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4177 leadSurrogate = codePoint
4181 // valid surrogate pair
4182 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4184 } else if (leadSurrogate) {
4185 // valid bmp char, but last char was a lead
4186 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4189 leadSurrogate = null
4192 if (codePoint <
0x80) {
4193 if ((units -=
1) <
0) break
4194 bytes.push(codePoint)
4195 } else if (codePoint <
0x800) {
4196 if ((units -=
2) <
0) break
4198 codePoint
>> 0x6 |
0xC0,
4199 codePoint &
0x3F |
0x80
4201 } else if (codePoint <
0x10000) {
4202 if ((units -=
3) <
0) break
4204 codePoint
>> 0xC |
0xE0,
4205 codePoint
>> 0x6 &
0x3F |
0x80,
4206 codePoint &
0x3F |
0x80
4208 } else if (codePoint <
0x110000) {
4209 if ((units -=
4) <
0) break
4211 codePoint
>> 0x12 |
0xF0,
4212 codePoint
>> 0xC &
0x3F |
0x80,
4213 codePoint
>> 0x6 &
0x3F |
0x80,
4214 codePoint &
0x3F |
0x80
4217 throw new Error('Invalid code point')
4224 function asciiToBytes (str) {
4226 for (var i =
0; i < str.length; i++) {
4227 // Node's code seems to be doing this and not &
0x7F..
4228 byteArray.push(str.charCodeAt(i) &
0xFF)
4233 function utf16leToBytes (str, units) {
4236 for (var i =
0; i < str.length; i++) {
4237 if ((units -=
2) <
0) break
4239 c = str.charCodeAt(i)
4249 function base64ToBytes (str) {
4250 return base64.toByteArray(base64clean(str))
4253 function blitBuffer (src, dst, offset, length) {
4254 for (var i =
0; i < length; i++) {
4255 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4256 dst[i + offset] = src[i]
4261 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4262 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4264 ;(function (exports) {
4267 var Arr = (typeof Uint8Array !== 'undefined')
4271 var PLUS = '+'.charCodeAt(
0)
4272 var SLASH = '/'.charCodeAt(
0)
4273 var NUMBER = '
0'.charCodeAt(
0)
4274 var LOWER = 'a'.charCodeAt(
0)
4275 var UPPER = 'A'.charCodeAt(
0)
4276 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4277 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4279 function decode (elt) {
4280 var code = elt.charCodeAt(
0)
4281 if (code === PLUS ||
4282 code === PLUS_URL_SAFE)
4284 if (code === SLASH ||
4285 code === SLASH_URL_SAFE)
4288 return -
1 //no match
4289 if (code < NUMBER +
10)
4290 return code - NUMBER +
26 +
26
4291 if (code < UPPER +
26)
4293 if (code < LOWER +
26)
4294 return code - LOWER +
26
4297 function b64ToByteArray (b64) {
4298 var i, j, l, tmp, placeHolders, arr
4300 if (b64.length %
4 > 0) {
4301 throw new Error('Invalid string. Length must be a multiple of
4')
4304 // the number of equal signs (place holders)
4305 // if there are two placeholders, than the two characters before it
4306 // represent one byte
4307 // if there is only one, then the three characters before it represent
2 bytes
4308 // this is just a cheap hack to not do indexOf twice
4309 var len = b64.length
4310 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4312 // base64 is
4/
3 + up to two characters of the original data
4313 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4315 // if there are placeholders, only get up to the last complete
4 chars
4316 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4324 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4325 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4326 push((tmp &
0xFF0000)
>> 16)
4327 push((tmp &
0xFF00)
>> 8)
4331 if (placeHolders ===
2) {
4332 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4334 } else if (placeHolders ===
1) {
4335 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4336 push((tmp
>> 8) &
0xFF)
4343 function uint8ToBase64 (uint8) {
4345 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4349 function encode (num) {
4350 return lookup.charAt(num)
4353 function tripletToBase64 (num) {
4354 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4357 // go through the array every three bytes, we'll deal with trailing stuff later
4358 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4359 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4360 output += tripletToBase64(temp)
4363 // pad the end with zeros, but make sure to not forget the extra bytes
4364 switch (extraBytes) {
4366 temp = uint8[uint8.length -
1]
4367 output += encode(temp
>> 2)
4368 output += encode((temp <<
4) &
0x3F)
4372 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4373 output += encode(temp
>> 10)
4374 output += encode((temp
>> 4) &
0x3F)
4375 output += encode((temp <<
2) &
0x3F)
4383 exports.toByteArray = b64ToByteArray
4384 exports.fromByteArray = uint8ToBase64
4385 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4387 },{}],
9:[function(require,module,exports){
4388 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4390 var eLen = nBytes *
8 - mLen -
1
4391 var eMax = (
1 << eLen) -
1
4392 var eBias = eMax
>> 1
4394 var i = isLE ? (nBytes -
1) :
0
4395 var d = isLE ? -
1 :
1
4396 var s = buffer[offset + i]
4400 e = s & ((
1 << (-nBits)) -
1)
4403 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4405 m = e & ((
1 << (-nBits)) -
1)
4408 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4412 } else if (e === eMax) {
4413 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4415 m = m + Math.pow(
2, mLen)
4418 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4421 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4423 var eLen = nBytes *
8 - mLen -
1
4424 var eMax = (
1 << eLen) -
1
4425 var eBias = eMax
>> 1
4426 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4427 var i = isLE ?
0 : (nBytes -
1)
4428 var d = isLE ?
1 : -
1
4429 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4431 value = Math.abs(value)
4433 if (isNaN(value) || value === Infinity) {
4434 m = isNaN(value) ?
1 :
0
4437 e = Math.floor(Math.log(value) / Math.LN2)
4438 if (value * (c = Math.pow(
2, -e)) <
1) {
4442 if (e + eBias
>=
1) {
4445 value += rt * Math.pow(
2,
1 - eBias)
4447 if (value * c
>=
2) {
4452 if (e + eBias
>= eMax) {
4455 } else if (e + eBias
>=
1) {
4456 m = (value * c -
1) * Math.pow(
2, mLen)
4459 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4464 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4468 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4470 buffer[offset + i - d] |= s *
128
4473 },{}],
10:[function(require,module,exports){
4479 var isArray = Array.isArray;
4485 var str = Object.prototype.toString;
4488 * Whether or not the given `val`
4495 * isArray(arguments);
4500 * @param {mixed} val
4504 module.exports = isArray || function (val) {
4505 return !! val && '[object Array]' == str.call(val);
4508 },{}],
11:[function(require,module,exports){
4509 // Copyright Joyent, Inc. and other Node contributors.
4511 // Permission is hereby granted, free of charge, to any person obtaining a
4512 // copy of this software and associated documentation files (the
4513 // "Software"), to deal in the Software without restriction, including
4514 // without limitation the rights to use, copy, modify, merge, publish,
4515 // distribute, sublicense, and/or sell copies of the Software, and to permit
4516 // persons to whom the Software is furnished to do so, subject to the
4517 // following conditions:
4519 // The above copyright notice and this permission notice shall be included
4520 // in all copies or substantial portions of the Software.
4522 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4523 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4524 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4525 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4526 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4527 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4528 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4530 function EventEmitter() {
4531 this._events = this._events || {};
4532 this._maxListeners = this._maxListeners || undefined;
4534 module.exports = EventEmitter;
4536 // Backwards-compat with node
0.10.x
4537 EventEmitter.EventEmitter = EventEmitter;
4539 EventEmitter.prototype._events = undefined;
4540 EventEmitter.prototype._maxListeners = undefined;
4542 // By default EventEmitters will print a warning if more than
10 listeners are
4543 // added to it. This is a useful default which helps finding memory leaks.
4544 EventEmitter.defaultMaxListeners =
10;
4546 // Obviously not all Emitters should be limited to
10. This function allows
4547 // that to be increased. Set to zero for unlimited.
4548 EventEmitter.prototype.setMaxListeners = function(n) {
4549 if (!isNumber(n) || n <
0 || isNaN(n))
4550 throw TypeError('n must be a positive number');
4551 this._maxListeners = n;
4555 EventEmitter.prototype.emit = function(type) {
4556 var er, handler, len, args, i, listeners;
4561 // If there is no 'error' event listener then throw.
4562 if (type === 'error') {
4563 if (!this._events.error ||
4564 (isObject(this._events.error) && !this._events.error.length)) {
4566 if (er instanceof Error) {
4567 throw er; // Unhandled 'error' event
4569 throw TypeError('Uncaught, unspecified "error" event.');
4573 handler = this._events[type];
4575 if (isUndefined(handler))
4578 if (isFunction(handler)) {
4579 switch (arguments.length) {
4585 handler.call(this, arguments[
1]);
4588 handler.call(this, arguments[
1], arguments[
2]);
4592 len = arguments.length;
4593 args = new Array(len -
1);
4594 for (i =
1; i < len; i++)
4595 args[i -
1] = arguments[i];
4596 handler.apply(this, args);
4598 } else if (isObject(handler)) {
4599 len = arguments.length;
4600 args = new Array(len -
1);
4601 for (i =
1; i < len; i++)
4602 args[i -
1] = arguments[i];
4604 listeners = handler.slice();
4605 len = listeners.length;
4606 for (i =
0; i < len; i++)
4607 listeners[i].apply(this, args);
4613 EventEmitter.prototype.addListener = function(type, listener) {
4616 if (!isFunction(listener))
4617 throw TypeError('listener must be a function');
4622 // To avoid recursion in the case that type === "newListener"! Before
4623 // adding it to the listeners, first emit "newListener".
4624 if (this._events.newListener)
4625 this.emit('newListener', type,
4626 isFunction(listener.listener) ?
4627 listener.listener : listener);
4629 if (!this._events[type])
4630 // Optimize the case of one listener. Don't need the extra array object.
4631 this._events[type] = listener;
4632 else if (isObject(this._events[type]))
4633 // If we've already got an array, just append.
4634 this._events[type].push(listener);
4636 // Adding the second element, need to change to array.
4637 this._events[type] = [this._events[type], listener];
4639 // Check for listener leak
4640 if (isObject(this._events[type]) && !this._events[type].warned) {
4642 if (!isUndefined(this._maxListeners)) {
4643 m = this._maxListeners;
4645 m = EventEmitter.defaultMaxListeners;
4648 if (m && m
> 0 && this._events[type].length
> m) {
4649 this._events[type].warned = true;
4650 console.error('(node) warning: possible EventEmitter memory ' +
4651 'leak detected. %d listeners added. ' +
4652 'Use emitter.setMaxListeners() to increase limit.',
4653 this._events[type].length);
4654 if (typeof console.trace === 'function') {
4655 // not supported in IE
10
4664 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4666 EventEmitter.prototype.once = function(type, listener) {
4667 if (!isFunction(listener))
4668 throw TypeError('listener must be a function');
4673 this.removeListener(type, g);
4677 listener.apply(this, arguments);
4681 g.listener = listener;
4687 // emits a 'removeListener' event iff the listener was removed
4688 EventEmitter.prototype.removeListener = function(type, listener) {
4689 var list, position, length, i;
4691 if (!isFunction(listener))
4692 throw TypeError('listener must be a function');
4694 if (!this._events || !this._events[type])
4697 list = this._events[type];
4698 length = list.length;
4701 if (list === listener ||
4702 (isFunction(list.listener) && list.listener === listener)) {
4703 delete this._events[type];
4704 if (this._events.removeListener)
4705 this.emit('removeListener', type, listener);
4707 } else if (isObject(list)) {
4708 for (i = length; i--
> 0;) {
4709 if (list[i] === listener ||
4710 (list[i].listener && list[i].listener === listener)) {
4719 if (list.length ===
1) {
4721 delete this._events[type];
4723 list.splice(position,
1);
4726 if (this._events.removeListener)
4727 this.emit('removeListener', type, listener);
4733 EventEmitter.prototype.removeAllListeners = function(type) {
4739 // not listening for removeListener, no need to emit
4740 if (!this._events.removeListener) {
4741 if (arguments.length ===
0)
4743 else if (this._events[type])
4744 delete this._events[type];
4748 // emit removeListener for all listeners on all events
4749 if (arguments.length ===
0) {
4750 for (key in this._events) {
4751 if (key === 'removeListener') continue;
4752 this.removeAllListeners(key);
4754 this.removeAllListeners('removeListener');
4759 listeners = this._events[type];
4761 if (isFunction(listeners)) {
4762 this.removeListener(type, listeners);
4765 while (listeners.length)
4766 this.removeListener(type, listeners[listeners.length -
1]);
4768 delete this._events[type];
4773 EventEmitter.prototype.listeners = function(type) {
4775 if (!this._events || !this._events[type])
4777 else if (isFunction(this._events[type]))
4778 ret = [this._events[type]];
4780 ret = this._events[type].slice();
4784 EventEmitter.listenerCount = function(emitter, type) {
4786 if (!emitter._events || !emitter._events[type])
4788 else if (isFunction(emitter._events[type]))
4791 ret = emitter._events[type].length;
4795 function isFunction(arg) {
4796 return typeof arg === 'function';
4799 function isNumber(arg) {
4800 return typeof arg === 'number';
4803 function isObject(arg) {
4804 return typeof arg === 'object' && arg !== null;
4807 function isUndefined(arg) {
4808 return arg === void
0;
4811 },{}],
12:[function(require,module,exports){
4812 if (typeof Object.create === 'function') {
4813 // implementation from standard node.js 'util' module
4814 module.exports = function inherits(ctor, superCtor) {
4815 ctor.super_ = superCtor
4816 ctor.prototype = Object.create(superCtor.prototype, {
4826 // old school shim for old browsers
4827 module.exports = function inherits(ctor, superCtor) {
4828 ctor.super_ = superCtor
4829 var TempCtor = function () {}
4830 TempCtor.prototype = superCtor.prototype
4831 ctor.prototype = new TempCtor()
4832 ctor.prototype.constructor = ctor
4836 },{}],
13:[function(require,module,exports){
4837 module.exports = Array.isArray || function (arr) {
4838 return Object.prototype.toString.call(arr) == '[object Array]';
4841 },{}],
14:[function(require,module,exports){
4842 // shim for using process in browser
4844 var process = module.exports = {};
4846 var draining = false;
4848 var queueIndex = -
1;
4850 function cleanUpNextTick() {
4852 if (currentQueue.length) {
4853 queue = currentQueue.concat(queue);
4862 function drainQueue() {
4866 var timeout = setTimeout(cleanUpNextTick);
4869 var len = queue.length;
4871 currentQueue = queue;
4873 while (++queueIndex < len) {
4874 currentQueue[queueIndex].run();
4879 currentQueue = null;
4881 clearTimeout(timeout);
4884 process.nextTick = function (fun) {
4885 var args = new Array(arguments.length -
1);
4886 if (arguments.length
> 1) {
4887 for (var i =
1; i < arguments.length; i++) {
4888 args[i -
1] = arguments[i];
4891 queue.push(new Item(fun, args));
4892 if (queue.length ===
1 && !draining) {
4893 setTimeout(drainQueue,
0);
4897 // v8 likes predictible objects
4898 function Item(fun, array) {
4902 Item.prototype.run = function () {
4903 this.fun.apply(null, this.array);
4905 process.title = 'browser';
4906 process.browser = true;
4909 process.version = ''; // empty string to avoid regexp issues
4910 process.versions = {};
4915 process.addListener = noop;
4916 process.once = noop;
4918 process.removeListener = noop;
4919 process.removeAllListeners = noop;
4920 process.emit = noop;
4922 process.binding = function (name) {
4923 throw new Error('process.binding is not supported');
4927 process.cwd = function () { return '/' };
4928 process.chdir = function (dir) {
4929 throw new Error('process.chdir is not supported');
4931 process.umask = function() { return
0; };
4933 },{}],
15:[function(require,module,exports){
4934 module.exports = require(
"./lib/_stream_duplex.js")
4936 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4937 (function (process){
4938 // Copyright Joyent, Inc. and other Node contributors.
4940 // Permission is hereby granted, free of charge, to any person obtaining a
4941 // copy of this software and associated documentation files (the
4942 //
"Software"), to deal in the Software without restriction, including
4943 // without limitation the rights to use, copy, modify, merge, publish,
4944 // distribute, sublicense, and/or sell copies of the Software, and to permit
4945 // persons to whom the Software is furnished to do so, subject to the
4946 // following conditions:
4948 // The above copyright notice and this permission notice shall be included
4949 // in all copies or substantial portions of the Software.
4951 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4952 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4953 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4954 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4955 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4956 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4957 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4959 // a duplex stream is just a stream that is both readable and writable.
4960 // Since JS doesn't have multiple prototypal inheritance, this class
4961 // prototypally inherits from Readable, and then parasitically from
4964 module.exports = Duplex;
4967 var objectKeys = Object.keys || function (obj) {
4969 for (var key in obj) keys.push(key);
4976 var util = require('core-util-is');
4977 util.inherits = require('inherits');
4980 var Readable = require('./_stream_readable');
4981 var Writable = require('./_stream_writable');
4983 util.inherits(Duplex, Readable);
4985 forEach(objectKeys(Writable.prototype), function(method) {
4986 if (!Duplex.prototype[method])
4987 Duplex.prototype[method] = Writable.prototype[method];
4990 function Duplex(options) {
4991 if (!(this instanceof Duplex))
4992 return new Duplex(options);
4994 Readable.call(this, options);
4995 Writable.call(this, options);
4997 if (options && options.readable === false)
4998 this.readable = false;
5000 if (options && options.writable === false)
5001 this.writable = false;
5003 this.allowHalfOpen = true;
5004 if (options && options.allowHalfOpen === false)
5005 this.allowHalfOpen = false;
5007 this.once('end', onend);
5010 // the no-half-open enforcer
5012 // if we allow half-open state, or if the writable side ended,
5014 if (this.allowHalfOpen || this._writableState.ended)
5017 // no more data can be written.
5018 // But allow more writes to happen in this tick.
5019 process.nextTick(this.end.bind(this));
5022 function forEach (xs, f) {
5023 for (var i =
0, l = xs.length; i < l; i++) {
5028 }).call(this,require('_process'))
5029 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
5030 // Copyright Joyent, Inc. and other Node contributors.
5032 // Permission is hereby granted, free of charge, to any person obtaining a
5033 // copy of this software and associated documentation files (the
5034 // "Software"), to deal in the Software without restriction, including
5035 // without limitation the rights to use, copy, modify, merge, publish,
5036 // distribute, sublicense, and/or sell copies of the Software, and to permit
5037 // persons to whom the Software is furnished to do so, subject to the
5038 // following conditions:
5040 // The above copyright notice and this permission notice shall be included
5041 // in all copies or substantial portions of the Software.
5043 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5044 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5045 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5046 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5047 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5048 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5049 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5051 // a passthrough stream.
5052 // basically just the most minimal sort of Transform stream.
5053 // Every written chunk gets output as-is.
5055 module.exports = PassThrough;
5057 var Transform = require('./_stream_transform');
5060 var util = require('core-util-is');
5061 util.inherits = require('inherits');
5064 util.inherits(PassThrough, Transform);
5066 function PassThrough(options) {
5067 if (!(this instanceof PassThrough))
5068 return new PassThrough(options);
5070 Transform.call(this, options);
5073 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5077 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5078 (function (process){
5079 // Copyright Joyent, Inc. and other Node contributors.
5081 // Permission is hereby granted, free of charge, to any person obtaining a
5082 // copy of this software and associated documentation files (the
5083 // "Software"), to deal in the Software without restriction, including
5084 // without limitation the rights to use, copy, modify, merge, publish,
5085 // distribute, sublicense, and/or sell copies of the Software, and to permit
5086 // persons to whom the Software is furnished to do so, subject to the
5087 // following conditions:
5089 // The above copyright notice and this permission notice shall be included
5090 // in all copies or substantial portions of the Software.
5092 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5093 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5094 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5095 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5096 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5097 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5098 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5100 module.exports = Readable;
5103 var isArray = require('isarray');
5108 var Buffer = require('buffer').Buffer;
5111 Readable.ReadableState = ReadableState;
5113 var EE = require('events').EventEmitter;
5116 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5117 return emitter.listeners(type).length;
5121 var Stream = require('stream');
5124 var util = require('core-util-is');
5125 util.inherits = require('inherits');
5132 var debug = require('util');
5133 if (debug && debug.debuglog) {
5134 debug = debug.debuglog('stream');
5136 debug = function () {};
5141 util.inherits(Readable, Stream);
5143 function ReadableState(options, stream) {
5144 var Duplex = require('./_stream_duplex');
5146 options = options || {};
5148 // the point at which it stops calling _read() to fill the buffer
5149 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5150 var hwm = options.highWaterMark;
5151 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5152 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5155 this.highWaterMark = ~~this.highWaterMark;
5160 this.pipesCount =
0;
5161 this.flowing = null;
5163 this.endEmitted = false;
5164 this.reading = false;
5166 // a flag to be able to tell if the onwrite cb is called immediately,
5167 // or on a later tick. We set this to true at first, because any
5168 // actions that shouldn't happen until "later" should generally also
5169 // not happen before the first write call.
5172 // whenever we return null, then we set a flag to say
5173 // that we're awaiting a 'readable' event emission.
5174 this.needReadable = false;
5175 this.emittedReadable = false;
5176 this.readableListening = false;
5179 // object stream flag. Used to make read(n) ignore n and to
5180 // make all the buffer merging and length checks go away
5181 this.objectMode = !!options.objectMode;
5183 if (stream instanceof Duplex)
5184 this.objectMode = this.objectMode || !!options.readableObjectMode;
5186 // Crypto is kind of old and crusty. Historically, its default string
5187 // encoding is 'binary' so we have to make this configurable.
5188 // Everything else in the universe uses 'utf8', though.
5189 this.defaultEncoding = options.defaultEncoding || 'utf8';
5191 // when piping, we only care about 'readable' events that happen
5192 // after read()ing all the bytes and not getting any pushback.
5193 this.ranOut = false;
5195 // the number of writers that are awaiting a drain event in .pipe()s
5196 this.awaitDrain =
0;
5198 // if true, a maybeReadMore has been scheduled
5199 this.readingMore = false;
5201 this.decoder = null;
5202 this.encoding = null;
5203 if (options.encoding) {
5205 StringDecoder = require('string_decoder/').StringDecoder;
5206 this.decoder = new StringDecoder(options.encoding);
5207 this.encoding = options.encoding;
5211 function Readable(options) {
5212 var Duplex = require('./_stream_duplex');
5214 if (!(this instanceof Readable))
5215 return new Readable(options);
5217 this._readableState = new ReadableState(options, this);
5220 this.readable = true;
5225 // Manually shove something into the read() buffer.
5226 // This returns true if the highWaterMark has not been hit yet,
5227 // similar to how Writable.write() returns true if you should
5228 // write() some more.
5229 Readable.prototype.push = function(chunk, encoding) {
5230 var state = this._readableState;
5232 if (util.isString(chunk) && !state.objectMode) {
5233 encoding = encoding || state.defaultEncoding;
5234 if (encoding !== state.encoding) {
5235 chunk = new Buffer(chunk, encoding);
5240 return readableAddChunk(this, state, chunk, encoding, false);
5243 // Unshift should *always* be something directly out of read()
5244 Readable.prototype.unshift = function(chunk) {
5245 var state = this._readableState;
5246 return readableAddChunk(this, state, chunk, '', true);
5249 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5250 var er = chunkInvalid(state, chunk);
5252 stream.emit('error', er);
5253 } else if (util.isNullOrUndefined(chunk)) {
5254 state.reading = false;
5256 onEofChunk(stream, state);
5257 } else if (state.objectMode || chunk && chunk.length
> 0) {
5258 if (state.ended && !addToFront) {
5259 var e = new Error('stream.push() after EOF');
5260 stream.emit('error', e);
5261 } else if (state.endEmitted && addToFront) {
5262 var e = new Error('stream.unshift() after end event');
5263 stream.emit('error', e);
5265 if (state.decoder && !addToFront && !encoding)
5266 chunk = state.decoder.write(chunk);
5269 state.reading = false;
5271 // if we want the data now, just emit it.
5272 if (state.flowing && state.length ===
0 && !state.sync) {
5273 stream.emit('data', chunk);
5276 // update the buffer info.
5277 state.length += state.objectMode ?
1 : chunk.length;
5279 state.buffer.unshift(chunk);
5281 state.buffer.push(chunk);
5283 if (state.needReadable)
5284 emitReadable(stream);
5287 maybeReadMore(stream, state);
5289 } else if (!addToFront) {
5290 state.reading = false;
5293 return needMoreData(state);
5298 // if it's past the high water mark, we can push in some more.
5299 // Also, if we have no data yet, we can stand some
5300 // more bytes. This is to work around cases where hwm=
0,
5301 // such as the repl. Also, if the push() triggered a
5302 // readable event, and the user called read(largeNumber) such that
5303 // needReadable was set, then we ought to push more, so that another
5304 // 'readable' event will be triggered.
5305 function needMoreData(state) {
5306 return !state.ended &&
5307 (state.needReadable ||
5308 state.length < state.highWaterMark ||
5309 state.length ===
0);
5312 // backwards compatibility.
5313 Readable.prototype.setEncoding = function(enc) {
5315 StringDecoder = require('string_decoder/').StringDecoder;
5316 this._readableState.decoder = new StringDecoder(enc);
5317 this._readableState.encoding = enc;
5321 // Don't raise the hwm
> 128MB
5322 var MAX_HWM =
0x800000;
5323 function roundUpToNextPowerOf2(n) {
5327 // Get the next highest power of
2
5329 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5335 function howMuchToRead(n, state) {
5336 if (state.length ===
0 && state.ended)
5339 if (state.objectMode)
5340 return n ===
0 ?
0 :
1;
5342 if (isNaN(n) || util.isNull(n)) {
5343 // only flow one buffer at a time
5344 if (state.flowing && state.buffer.length)
5345 return state.buffer[
0].length;
5347 return state.length;
5353 // If we're asking for more than the target buffer level,
5354 // then raise the water mark. Bump up to the next highest
5355 // power of
2, to prevent increasing it excessively in tiny
5357 if (n
> state.highWaterMark)
5358 state.highWaterMark = roundUpToNextPowerOf2(n);
5360 // don't have that much. return null, unless we've ended.
5361 if (n
> state.length) {
5363 state.needReadable = true;
5366 return state.length;
5372 // you can override either this method, or the async _read(n) below.
5373 Readable.prototype.read = function(n) {
5375 var state = this._readableState;
5378 if (!util.isNumber(n) || n
> 0)
5379 state.emittedReadable = false;
5381 // if we're doing read(
0) to trigger a readable event, but we
5382 // already have a bunch of data in the buffer, then just trigger
5383 // the 'readable' event and move on.
5385 state.needReadable &&
5386 (state.length
>= state.highWaterMark || state.ended)) {
5387 debug('read: emitReadable', state.length, state.ended);
5388 if (state.length ===
0 && state.ended)
5395 n = howMuchToRead(n, state);
5397 // if we've ended, and we're now clear, then finish it up.
5398 if (n ===
0 && state.ended) {
5399 if (state.length ===
0)
5404 // All the actual chunk generation logic needs to be
5405 // *below* the call to _read. The reason is that in certain
5406 // synthetic stream cases, such as passthrough streams, _read
5407 // may be a completely synchronous operation which may change
5408 // the state of the read buffer, providing enough data when
5409 // before there was *not* enough.
5411 // So, the steps are:
5412 //
1. Figure out what the state of things will be after we do
5413 // a read from the buffer.
5415 //
2. If that resulting state will trigger a _read, then call _read.
5416 // Note that this may be asynchronous, or synchronous. Yes, it is
5417 // deeply ugly to write APIs this way, but that still doesn't mean
5418 // that the Readable class should behave improperly, as streams are
5419 // designed to be sync/async agnostic.
5420 // Take note if the _read call is sync or async (ie, if the read call
5421 // has returned yet), so that we know whether or not it's safe to emit
5424 //
3. Actually pull the requested chunks out of the buffer and return.
5426 // if we need a readable event, then we need to do some reading.
5427 var doRead = state.needReadable;
5428 debug('need readable', doRead);
5430 // if we currently have less than the highWaterMark, then also read some
5431 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5433 debug('length less than watermark', doRead);
5436 // however, if we've ended, then there's no point, and if we're already
5437 // reading, then it's unnecessary.
5438 if (state.ended || state.reading) {
5440 debug('reading or ended', doRead);
5445 state.reading = true;
5447 // if the length is currently zero, then we *need* a readable event.
5448 if (state.length ===
0)
5449 state.needReadable = true;
5450 // call internal read method
5451 this._read(state.highWaterMark);
5455 // If _read pushed data synchronously, then `reading` will be false,
5456 // and we need to re-evaluate how much data we can return to the user.
5457 if (doRead && !state.reading)
5458 n = howMuchToRead(nOrig, state);
5462 ret = fromList(n, state);
5466 if (util.isNull(ret)) {
5467 state.needReadable = true;
5473 // If we have nothing in the buffer, then we want to know
5474 // as soon as we *do* get something into the buffer.
5475 if (state.length ===
0 && !state.ended)
5476 state.needReadable = true;
5478 // If we tried to read() past the EOF, then emit end on the next tick.
5479 if (nOrig !== n && state.ended && state.length ===
0)
5482 if (!util.isNull(ret))
5483 this.emit('data', ret);
5488 function chunkInvalid(state, chunk) {
5490 if (!util.isBuffer(chunk) &&
5491 !util.isString(chunk) &&
5492 !util.isNullOrUndefined(chunk) &&
5493 !state.objectMode) {
5494 er = new TypeError('Invalid non-string/buffer chunk');
5500 function onEofChunk(stream, state) {
5501 if (state.decoder && !state.ended) {
5502 var chunk = state.decoder.end();
5503 if (chunk && chunk.length) {
5504 state.buffer.push(chunk);
5505 state.length += state.objectMode ?
1 : chunk.length;
5510 // emit 'readable' now to make sure it gets picked up.
5511 emitReadable(stream);
5514 // Don't emit readable right away in sync mode, because this can trigger
5515 // another read() call =
> stack overflow. This way, it might trigger
5516 // a nextTick recursion warning, but that's not so bad.
5517 function emitReadable(stream) {
5518 var state = stream._readableState;
5519 state.needReadable = false;
5520 if (!state.emittedReadable) {
5521 debug('emitReadable', state.flowing);
5522 state.emittedReadable = true;
5524 process.nextTick(function() {
5525 emitReadable_(stream);
5528 emitReadable_(stream);
5532 function emitReadable_(stream) {
5533 debug('emit readable');
5534 stream.emit('readable');
5539 // at this point, the user has presumably seen the 'readable' event,
5540 // and called read() to consume some data. that may have triggered
5541 // in turn another _read(n) call, in which case reading = true if
5542 // it's in progress.
5543 // However, if we're not ended, or reading, and the length < hwm,
5544 // then go ahead and try to read some more preemptively.
5545 function maybeReadMore(stream, state) {
5546 if (!state.readingMore) {
5547 state.readingMore = true;
5548 process.nextTick(function() {
5549 maybeReadMore_(stream, state);
5554 function maybeReadMore_(stream, state) {
5555 var len = state.length;
5556 while (!state.reading && !state.flowing && !state.ended &&
5557 state.length < state.highWaterMark) {
5558 debug('maybeReadMore read
0');
5560 if (len === state.length)
5561 // didn't get any data, stop spinning.
5566 state.readingMore = false;
5569 // abstract method. to be overridden in specific implementation classes.
5570 // call cb(er, data) where data is <= n in length.
5571 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5572 // arbitrary, and perhaps not very meaningful.
5573 Readable.prototype._read = function(n) {
5574 this.emit('error', new Error('not implemented'));
5577 Readable.prototype.pipe = function(dest, pipeOpts) {
5579 var state = this._readableState;
5581 switch (state.pipesCount) {
5586 state.pipes = [state.pipes, dest];
5589 state.pipes.push(dest);
5592 state.pipesCount +=
1;
5593 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5595 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5596 dest !== process.stdout &&
5597 dest !== process.stderr;
5599 var endFn = doEnd ? onend : cleanup;
5600 if (state.endEmitted)
5601 process.nextTick(endFn);
5603 src.once('end', endFn);
5605 dest.on('unpipe', onunpipe);
5606 function onunpipe(readable) {
5608 if (readable === src) {
5618 // when the dest drains, it reduces the awaitDrain counter
5619 // on the source. This would be more elegant with a .once()
5620 // handler in flow(), but adding and removing repeatedly is
5622 var ondrain = pipeOnDrain(src);
5623 dest.on('drain', ondrain);
5625 function cleanup() {
5627 // cleanup event handlers once the pipe is broken
5628 dest.removeListener('close', onclose);
5629 dest.removeListener('finish', onfinish);
5630 dest.removeListener('drain', ondrain);
5631 dest.removeListener('error', onerror);
5632 dest.removeListener('unpipe', onunpipe);
5633 src.removeListener('end', onend);
5634 src.removeListener('end', cleanup);
5635 src.removeListener('data', ondata);
5637 // if the reader is waiting for a drain event from this
5638 // specific writer, then it would cause it to never start
5640 // So, if this is awaiting a drain, then we just call it now.
5641 // If we don't know, then assume that we are waiting for one.
5642 if (state.awaitDrain &&
5643 (!dest._writableState || dest._writableState.needDrain))
5647 src.on('data', ondata);
5648 function ondata(chunk) {
5650 var ret = dest.write(chunk);
5651 if (false === ret) {
5652 debug('false write response, pause',
5653 src._readableState.awaitDrain);
5654 src._readableState.awaitDrain++;
5659 // if the dest has an error, then stop piping into it.
5660 // however, don't suppress the throwing behavior for this.
5661 function onerror(er) {
5662 debug('onerror', er);
5664 dest.removeListener('error', onerror);
5665 if (EE.listenerCount(dest, 'error') ===
0)
5666 dest.emit('error', er);
5668 // This is a brutally ugly hack to make sure that our error handler
5669 // is attached before any userland ones. NEVER DO THIS.
5670 if (!dest._events || !dest._events.error)
5671 dest.on('error', onerror);
5672 else if (isArray(dest._events.error))
5673 dest._events.error.unshift(onerror);
5675 dest._events.error = [onerror, dest._events.error];
5679 // Both close and finish should trigger unpipe, but only once.
5680 function onclose() {
5681 dest.removeListener('finish', onfinish);
5684 dest.once('close', onclose);
5685 function onfinish() {
5687 dest.removeListener('close', onclose);
5690 dest.once('finish', onfinish);
5697 // tell the dest that it's being piped to
5698 dest.emit('pipe', src);
5700 // start the flow if it hasn't been started already.
5701 if (!state.flowing) {
5702 debug('pipe resume');
5709 function pipeOnDrain(src) {
5711 var state = src._readableState;
5712 debug('pipeOnDrain', state.awaitDrain);
5713 if (state.awaitDrain)
5715 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5716 state.flowing = true;
5723 Readable.prototype.unpipe = function(dest) {
5724 var state = this._readableState;
5726 // if we're not piping anywhere, then do nothing.
5727 if (state.pipesCount ===
0)
5730 // just one destination. most common case.
5731 if (state.pipesCount ===
1) {
5732 // passed in one, but it's not the right one.
5733 if (dest && dest !== state.pipes)
5741 state.pipesCount =
0;
5742 state.flowing = false;
5744 dest.emit('unpipe', this);
5748 // slow case. multiple pipe destinations.
5752 var dests = state.pipes;
5753 var len = state.pipesCount;
5755 state.pipesCount =
0;
5756 state.flowing = false;
5758 for (var i =
0; i < len; i++)
5759 dests[i].emit('unpipe', this);
5763 // try to find the right one.
5764 var i = indexOf(state.pipes, dest);
5768 state.pipes.splice(i,
1);
5769 state.pipesCount -=
1;
5770 if (state.pipesCount ===
1)
5771 state.pipes = state.pipes[
0];
5773 dest.emit('unpipe', this);
5778 // set up data events if they are asked for
5779 // Ensure readable listeners eventually get something
5780 Readable.prototype.on = function(ev, fn) {
5781 var res = Stream.prototype.on.call(this, ev, fn);
5783 // If listening to data, and it has not explicitly been paused,
5784 // then call resume to start the flow of data on the next tick.
5785 if (ev === 'data' && false !== this._readableState.flowing) {
5789 if (ev === 'readable' && this.readable) {
5790 var state = this._readableState;
5791 if (!state.readableListening) {
5792 state.readableListening = true;
5793 state.emittedReadable = false;
5794 state.needReadable = true;
5795 if (!state.reading) {
5797 process.nextTick(function() {
5798 debug('readable nexttick read
0');
5801 } else if (state.length) {
5802 emitReadable(this, state);
5809 Readable.prototype.addListener = Readable.prototype.on;
5811 // pause() and resume() are remnants of the legacy readable stream API
5812 // If the user uses them, then switch into old mode.
5813 Readable.prototype.resume = function() {
5814 var state = this._readableState;
5815 if (!state.flowing) {
5817 state.flowing = true;
5818 if (!state.reading) {
5819 debug('resume read
0');
5822 resume(this, state);
5827 function resume(stream, state) {
5828 if (!state.resumeScheduled) {
5829 state.resumeScheduled = true;
5830 process.nextTick(function() {
5831 resume_(stream, state);
5836 function resume_(stream, state) {
5837 state.resumeScheduled = false;
5838 stream.emit('resume');
5840 if (state.flowing && !state.reading)
5844 Readable.prototype.pause = function() {
5845 debug('call pause flowing=%j', this._readableState.flowing);
5846 if (false !== this._readableState.flowing) {
5848 this._readableState.flowing = false;
5854 function flow(stream) {
5855 var state = stream._readableState;
5856 debug('flow', state.flowing);
5857 if (state.flowing) {
5859 var chunk = stream.read();
5860 } while (null !== chunk && state.flowing);
5864 // wrap an old-style stream as the async data source.
5865 // This is *not* part of the readable stream interface.
5866 // It is an ugly unfortunate mess of history.
5867 Readable.prototype.wrap = function(stream) {
5868 var state = this._readableState;
5872 stream.on('end', function() {
5873 debug('wrapped end');
5874 if (state.decoder && !state.ended) {
5875 var chunk = state.decoder.end();
5876 if (chunk && chunk.length)
5883 stream.on('data', function(chunk) {
5884 debug('wrapped data');
5886 chunk = state.decoder.write(chunk);
5887 if (!chunk || !state.objectMode && !chunk.length)
5890 var ret = self.push(chunk);
5897 // proxy all the other methods.
5898 // important when wrapping filters and duplexes.
5899 for (var i in stream) {
5900 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5901 this[i] = function(method) { return function() {
5902 return stream[method].apply(stream, arguments);
5907 // proxy certain important events.
5908 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5909 forEach(events, function(ev) {
5910 stream.on(ev, self.emit.bind(self, ev));
5913 // when we try to consume some more bytes, simply unpause the
5914 // underlying stream.
5915 self._read = function(n) {
5916 debug('wrapped _read', n);
5928 // exposed for testing purposes only.
5929 Readable._fromList = fromList;
5931 // Pluck off n bytes from an array of buffers.
5932 // Length is the combined lengths of all the buffers in the list.
5933 function fromList(n, state) {
5934 var list = state.buffer;
5935 var length = state.length;
5936 var stringMode = !!state.decoder;
5937 var objectMode = !!state.objectMode;
5940 // nothing in the list, definitely empty.
5941 if (list.length ===
0)
5946 else if (objectMode)
5948 else if (!n || n
>= length) {
5949 // read it all, truncate the array.
5951 ret = list.join('');
5953 ret = Buffer.concat(list, length);
5956 // read just some of it.
5957 if (n < list[
0].length) {
5958 // just take a part of the first list item.
5959 // slice is the same for buffers and strings.
5961 ret = buf.slice(
0, n);
5962 list[
0] = buf.slice(n);
5963 } else if (n === list[
0].length) {
5964 // first list is a perfect match
5968 // we have enough to cover it, but it spans past the first buffer.
5972 ret = new Buffer(n);
5975 for (var i =
0, l = list.length; i < l && c < n; i++) {
5977 var cpy = Math.min(n - c, buf.length);
5980 ret += buf.slice(
0, cpy);
5982 buf.copy(ret, c,
0, cpy);
5984 if (cpy < buf.length)
5985 list[
0] = buf.slice(cpy);
5997 function endReadable(stream) {
5998 var state = stream._readableState;
6000 // If we get here before consuming all the bytes, then that is a
6001 // bug in node. Should never happen.
6002 if (state.length
> 0)
6003 throw new Error('endReadable called on non-empty stream');
6005 if (!state.endEmitted) {
6007 process.nextTick(function() {
6008 // Check that we didn't get one last unshift.
6009 if (!state.endEmitted && state.length ===
0) {
6010 state.endEmitted = true;
6011 stream.readable = false;
6018 function forEach (xs, f) {
6019 for (var i =
0, l = xs.length; i < l; i++) {
6024 function indexOf (xs, x) {
6025 for (var i =
0, l = xs.length; i < l; i++) {
6026 if (xs[i] === x) return i;
6031 }).call(this,require('_process'))
6032 },{
"./_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){
6033 // Copyright Joyent, Inc. and other Node contributors.
6035 // Permission is hereby granted, free of charge, to any person obtaining a
6036 // copy of this software and associated documentation files (the
6037 //
"Software"), to deal in the Software without restriction, including
6038 // without limitation the rights to use, copy, modify, merge, publish,
6039 // distribute, sublicense, and/or sell copies of the Software, and to permit
6040 // persons to whom the Software is furnished to do so, subject to the
6041 // following conditions:
6043 // The above copyright notice and this permission notice shall be included
6044 // in all copies or substantial portions of the Software.
6046 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6047 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6048 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6049 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6050 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6051 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6052 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6055 // a transform stream is a readable/writable stream where you do
6056 // something with the data. Sometimes it's called a
"filter",
6057 // but that's not a great name for it, since that implies a thing where
6058 // some bits pass through, and others are simply ignored. (That would
6059 // be a valid example of a transform, of course.)
6061 // While the output is causally related to the input, it's not a
6062 // necessarily symmetric or synchronous transformation. For example,
6063 // a zlib stream might take multiple plain-text writes(), and then
6064 // emit a single compressed chunk some time in the future.
6066 // Here's how this works:
6068 // The Transform stream has all the aspects of the readable and writable
6069 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6070 // internally, and returns false if there's a lot of pending writes
6071 // buffered up. When you call read(), that calls _read(n) until
6072 // there's enough pending readable data buffered up.
6074 // In a transform stream, the written data is placed in a buffer. When
6075 // _read(n) is called, it transforms the queued up data, calling the
6076 // buffered _write cb's as it consumes chunks. If consuming a single
6077 // written chunk would result in multiple output chunks, then the first
6078 // outputted bit calls the readcb, and subsequent chunks just go into
6079 // the read buffer, and will cause it to emit 'readable' if necessary.
6081 // This way, back-pressure is actually determined by the reading side,
6082 // since _read has to be called to start processing a new chunk. However,
6083 // a pathological inflate type of transform can cause excessive buffering
6084 // here. For example, imagine a stream where every byte of input is
6085 // interpreted as an integer from
0-
255, and then results in that many
6086 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6087 //
1kb of data being output. In this case, you could write a very small
6088 // amount of input, and end up with a very large amount of output. In
6089 // such a pathological inflating mechanism, there'd be no way to tell
6090 // the system to stop doing the transform. A single
4MB write could
6091 // cause the system to run out of memory.
6093 // However, even in such a pathological case, only a single written chunk
6094 // would be consumed, and then the rest would wait (un-transformed) until
6095 // the results of the previous transformed chunk were consumed.
6097 module.exports = Transform;
6099 var Duplex = require('./_stream_duplex');
6102 var util = require('core-util-is');
6103 util.inherits = require('inherits');
6106 util.inherits(Transform, Duplex);
6109 function TransformState(options, stream) {
6110 this.afterTransform = function(er, data) {
6111 return afterTransform(stream, er, data);
6114 this.needTransform = false;
6115 this.transforming = false;
6116 this.writecb = null;
6117 this.writechunk = null;
6120 function afterTransform(stream, er, data) {
6121 var ts = stream._transformState;
6122 ts.transforming = false;
6124 var cb = ts.writecb;
6127 return stream.emit('error', new Error('no writecb in Transform class'));
6129 ts.writechunk = null;
6132 if (!util.isNullOrUndefined(data))
6138 var rs = stream._readableState;
6140 if (rs.needReadable || rs.length < rs.highWaterMark) {
6141 stream._read(rs.highWaterMark);
6146 function Transform(options) {
6147 if (!(this instanceof Transform))
6148 return new Transform(options);
6150 Duplex.call(this, options);
6152 this._transformState = new TransformState(options, this);
6154 // when the writable side finishes, then flush out anything remaining.
6157 // start out asking for a readable event once data is transformed.
6158 this._readableState.needReadable = true;
6160 // we have implemented the _read method, and done the other things
6161 // that Readable wants before the first _read call, so unset the
6163 this._readableState.sync = false;
6165 this.once('prefinish', function() {
6166 if (util.isFunction(this._flush))
6167 this._flush(function(er) {
6175 Transform.prototype.push = function(chunk, encoding) {
6176 this._transformState.needTransform = false;
6177 return Duplex.prototype.push.call(this, chunk, encoding);
6180 // This is the part where you do stuff!
6181 // override this function in implementation classes.
6182 // 'chunk' is an input chunk.
6184 // Call `push(newChunk)` to pass along transformed output
6185 // to the readable side. You may call 'push' zero or more times.
6187 // Call `cb(err)` when you are done with this chunk. If you pass
6188 // an error, then that'll put the hurt on the whole operation. If you
6189 // never call cb(), then you'll never get another chunk.
6190 Transform.prototype._transform = function(chunk, encoding, cb) {
6191 throw new Error('not implemented');
6194 Transform.prototype._write = function(chunk, encoding, cb) {
6195 var ts = this._transformState;
6197 ts.writechunk = chunk;
6198 ts.writeencoding = encoding;
6199 if (!ts.transforming) {
6200 var rs = this._readableState;
6201 if (ts.needTransform ||
6203 rs.length < rs.highWaterMark)
6204 this._read(rs.highWaterMark);
6208 // Doesn't matter what the args are here.
6209 // _transform does all the work.
6210 // That we got here means that the readable side wants more data.
6211 Transform.prototype._read = function(n) {
6212 var ts = this._transformState;
6214 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6215 ts.transforming = true;
6216 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6218 // mark that we need a transform, so that any data that comes in
6219 // will get processed, now that we've asked for it.
6220 ts.needTransform = true;
6225 function done(stream, er) {
6227 return stream.emit('error', er);
6229 // if there's nothing in the write buffer, then that means
6230 // that nothing more will ever be provided
6231 var ws = stream._writableState;
6232 var ts = stream._transformState;
6235 throw new Error('calling transform done when ws.length !=
0');
6237 if (ts.transforming)
6238 throw new Error('calling transform done when still transforming');
6240 return stream.push(null);
6243 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6244 (function (process){
6245 // Copyright Joyent, Inc. and other Node contributors.
6247 // Permission is hereby granted, free of charge, to any person obtaining a
6248 // copy of this software and associated documentation files (the
6249 // "Software"), to deal in the Software without restriction, including
6250 // without limitation the rights to use, copy, modify, merge, publish,
6251 // distribute, sublicense, and/or sell copies of the Software, and to permit
6252 // persons to whom the Software is furnished to do so, subject to the
6253 // following conditions:
6255 // The above copyright notice and this permission notice shall be included
6256 // in all copies or substantial portions of the Software.
6258 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6259 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6260 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6261 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6262 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6263 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6264 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6266 // A bit simpler than readable streams.
6267 // Implement an async ._write(chunk, cb), and it'll handle all
6268 // the drain event emission and buffering.
6270 module.exports = Writable;
6273 var Buffer = require('buffer').Buffer;
6276 Writable.WritableState = WritableState;
6280 var util = require('core-util-is');
6281 util.inherits = require('inherits');
6284 var Stream = require('stream');
6286 util.inherits(Writable, Stream);
6288 function WriteReq(chunk, encoding, cb) {
6290 this.encoding = encoding;
6294 function WritableState(options, stream) {
6295 var Duplex = require('./_stream_duplex');
6297 options = options || {};
6299 // the point at which write() starts returning false
6300 // Note:
0 is a valid value, means that we always return false if
6301 // the entire buffer is not flushed immediately on write()
6302 var hwm = options.highWaterMark;
6303 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6304 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6306 // object stream flag to indicate whether or not this stream
6307 // contains buffers or objects.
6308 this.objectMode = !!options.objectMode;
6310 if (stream instanceof Duplex)
6311 this.objectMode = this.objectMode || !!options.writableObjectMode;
6314 this.highWaterMark = ~~this.highWaterMark;
6316 this.needDrain = false;
6317 // at the start of calling end()
6318 this.ending = false;
6319 // when end() has been called, and returned
6321 // when 'finish' is emitted
6322 this.finished = false;
6324 // should we decode strings into buffers before passing to _write?
6325 // this is here so that some node-core streams can optimize string
6326 // handling at a lower level.
6327 var noDecode = options.decodeStrings === false;
6328 this.decodeStrings = !noDecode;
6330 // Crypto is kind of old and crusty. Historically, its default string
6331 // encoding is 'binary' so we have to make this configurable.
6332 // Everything else in the universe uses 'utf8', though.
6333 this.defaultEncoding = options.defaultEncoding || 'utf8';
6335 // not an actual buffer we keep track of, but a measurement
6336 // of how much we're waiting to get pushed to some underlying
6340 // a flag to see when we're in the middle of a write.
6341 this.writing = false;
6343 // when true all writes will be buffered until .uncork() call
6346 // a flag to be able to tell if the onwrite cb is called immediately,
6347 // or on a later tick. We set this to true at first, because any
6348 // actions that shouldn't happen until "later" should generally also
6349 // not happen before the first write call.
6352 // a flag to know if we're processing previously buffered items, which
6353 // may call the _write() callback in the same tick, so that we don't
6354 // end up in an overlapped onwrite situation.
6355 this.bufferProcessing = false;
6357 // the callback that's passed to _write(chunk,cb)
6358 this.onwrite = function(er) {
6359 onwrite(stream, er);
6362 // the callback that the user supplies to write(chunk,encoding,cb)
6363 this.writecb = null;
6365 // the amount that is being written when _write is called.
6370 // number of pending user-supplied write callbacks
6371 // this must be
0 before 'finish' can be emitted
6374 // emit prefinish if the only thing we're waiting for is _write cbs
6375 // This is relevant for synchronous Transform streams
6376 this.prefinished = false;
6378 // True if the error was already emitted and should not be thrown again
6379 this.errorEmitted = false;
6382 function Writable(options) {
6383 var Duplex = require('./_stream_duplex');
6385 // Writable ctor is applied to Duplexes, though they're not
6386 // instanceof Writable, they're instanceof Readable.
6387 if (!(this instanceof Writable) && !(this instanceof Duplex))
6388 return new Writable(options);
6390 this._writableState = new WritableState(options, this);
6393 this.writable = true;
6398 // Otherwise people can pipe Writable streams, which is just wrong.
6399 Writable.prototype.pipe = function() {
6400 this.emit('error', new Error('Cannot pipe. Not readable.'));
6404 function writeAfterEnd(stream, state, cb) {
6405 var er = new Error('write after end');
6406 // TODO: defer error events consistently everywhere, not just the cb
6407 stream.emit('error', er);
6408 process.nextTick(function() {
6413 // If we get something that is not a buffer, string, null, or undefined,
6414 // and we're not in objectMode, then that's an error.
6415 // Otherwise stream chunks are all considered to be of length=
1, and the
6416 // watermarks determine how many objects to keep in the buffer, rather than
6417 // how many bytes or characters.
6418 function validChunk(stream, state, chunk, cb) {
6420 if (!util.isBuffer(chunk) &&
6421 !util.isString(chunk) &&
6422 !util.isNullOrUndefined(chunk) &&
6423 !state.objectMode) {
6424 var er = new TypeError('Invalid non-string/buffer chunk');
6425 stream.emit('error', er);
6426 process.nextTick(function() {
6434 Writable.prototype.write = function(chunk, encoding, cb) {
6435 var state = this._writableState;
6438 if (util.isFunction(encoding)) {
6443 if (util.isBuffer(chunk))
6444 encoding = 'buffer';
6446 encoding = state.defaultEncoding;
6448 if (!util.isFunction(cb))
6452 writeAfterEnd(this, state, cb);
6453 else if (validChunk(this, state, chunk, cb)) {
6455 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6461 Writable.prototype.cork = function() {
6462 var state = this._writableState;
6467 Writable.prototype.uncork = function() {
6468 var state = this._writableState;
6473 if (!state.writing &&
6476 !state.bufferProcessing &&
6477 state.buffer.length)
6478 clearBuffer(this, state);
6482 function decodeChunk(state, chunk, encoding) {
6483 if (!state.objectMode &&
6484 state.decodeStrings !== false &&
6485 util.isString(chunk)) {
6486 chunk = new Buffer(chunk, encoding);
6491 // if we're already writing something, then just put this
6492 // in the queue, and wait our turn. Otherwise, call _write
6493 // If we return false, then we need a drain event, so set that flag.
6494 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6495 chunk = decodeChunk(state, chunk, encoding);
6496 if (util.isBuffer(chunk))
6497 encoding = 'buffer';
6498 var len = state.objectMode ?
1 : chunk.length;
6500 state.length += len;
6502 var ret = state.length < state.highWaterMark;
6503 // we must ensure that previous needDrain will not be reset to false.
6505 state.needDrain = true;
6507 if (state.writing || state.corked)
6508 state.buffer.push(new WriteReq(chunk, encoding, cb));
6510 doWrite(stream, state, false, len, chunk, encoding, cb);
6515 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6516 state.writelen = len;
6518 state.writing = true;
6521 stream._writev(chunk, state.onwrite);
6523 stream._write(chunk, encoding, state.onwrite);
6527 function onwriteError(stream, state, sync, er, cb) {
6529 process.nextTick(function() {
6538 stream._writableState.errorEmitted = true;
6539 stream.emit('error', er);
6542 function onwriteStateUpdate(state) {
6543 state.writing = false;
6544 state.writecb = null;
6545 state.length -= state.writelen;
6549 function onwrite(stream, er) {
6550 var state = stream._writableState;
6551 var sync = state.sync;
6552 var cb = state.writecb;
6554 onwriteStateUpdate(state);
6557 onwriteError(stream, state, sync, er, cb);
6559 // Check if we're actually ready to finish, but don't emit yet
6560 var finished = needFinish(stream, state);
6564 !state.bufferProcessing &&
6565 state.buffer.length) {
6566 clearBuffer(stream, state);
6570 process.nextTick(function() {
6571 afterWrite(stream, state, finished, cb);
6574 afterWrite(stream, state, finished, cb);
6579 function afterWrite(stream, state, finished, cb) {
6581 onwriteDrain(stream, state);
6584 finishMaybe(stream, state);
6587 // Must force callback to be called on nextTick, so that we don't
6588 // emit 'drain' before the write() consumer gets the 'false' return
6589 // value, and has a chance to attach a 'drain' listener.
6590 function onwriteDrain(stream, state) {
6591 if (state.length ===
0 && state.needDrain) {
6592 state.needDrain = false;
6593 stream.emit('drain');
6598 // if there's something in the buffer waiting, then process it
6599 function clearBuffer(stream, state) {
6600 state.bufferProcessing = true;
6602 if (stream._writev && state.buffer.length
> 1) {
6603 // Fast case, write everything using _writev()
6605 for (var c =
0; c < state.buffer.length; c++)
6606 cbs.push(state.buffer[c].callback);
6608 // count the one we are adding, as well.
6609 // TODO(isaacs) clean this up
6611 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6612 for (var i =
0; i < cbs.length; i++) {
6621 // Slow case, write chunks one-by-one
6622 for (var c =
0; c < state.buffer.length; c++) {
6623 var entry = state.buffer[c];
6624 var chunk = entry.chunk;
6625 var encoding = entry.encoding;
6626 var cb = entry.callback;
6627 var len = state.objectMode ?
1 : chunk.length;
6629 doWrite(stream, state, false, len, chunk, encoding, cb);
6631 // if we didn't call the onwrite immediately, then
6632 // it means that we need to wait until it does.
6633 // also, that means that the chunk and cb are currently
6634 // being processed, so move the buffer counter past them.
6635 if (state.writing) {
6641 if (c < state.buffer.length)
6642 state.buffer = state.buffer.slice(c);
6644 state.buffer.length =
0;
6647 state.bufferProcessing = false;
6650 Writable.prototype._write = function(chunk, encoding, cb) {
6651 cb(new Error('not implemented'));
6655 Writable.prototype._writev = null;
6657 Writable.prototype.end = function(chunk, encoding, cb) {
6658 var state = this._writableState;
6660 if (util.isFunction(chunk)) {
6664 } else if (util.isFunction(encoding)) {
6669 if (!util.isNullOrUndefined(chunk))
6670 this.write(chunk, encoding);
6672 // .end() fully uncorks
6678 // ignore unnecessary end() calls.
6679 if (!state.ending && !state.finished)
6680 endWritable(this, state, cb);
6684 function needFinish(stream, state) {
6685 return (state.ending &&
6686 state.length ===
0 &&
6691 function prefinish(stream, state) {
6692 if (!state.prefinished) {
6693 state.prefinished = true;
6694 stream.emit('prefinish');
6698 function finishMaybe(stream, state) {
6699 var need = needFinish(stream, state);
6701 if (state.pendingcb ===
0) {
6702 prefinish(stream, state);
6703 state.finished = true;
6704 stream.emit('finish');
6706 prefinish(stream, state);
6711 function endWritable(stream, state, cb) {
6712 state.ending = true;
6713 finishMaybe(stream, state);
6716 process.nextTick(cb);
6718 stream.once('finish', cb);
6723 }).call(this,require('_process'))
6724 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6726 // Copyright Joyent, Inc. and other Node contributors.
6728 // Permission is hereby granted, free of charge, to any person obtaining a
6729 // copy of this software and associated documentation files (the
6730 //
"Software"), to deal in the Software without restriction, including
6731 // without limitation the rights to use, copy, modify, merge, publish,
6732 // distribute, sublicense, and/or sell copies of the Software, and to permit
6733 // persons to whom the Software is furnished to do so, subject to the
6734 // following conditions:
6736 // The above copyright notice and this permission notice shall be included
6737 // in all copies or substantial portions of the Software.
6739 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6740 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6741 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6742 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6743 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6744 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6745 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6747 // NOTE: These type checking functions intentionally don't use `instanceof`
6748 // because it is fragile and can be easily faked with `Object.create()`.
6749 function isArray(ar) {
6750 return Array.isArray(ar);
6752 exports.isArray = isArray;
6754 function isBoolean(arg) {
6755 return typeof arg === 'boolean';
6757 exports.isBoolean = isBoolean;
6759 function isNull(arg) {
6760 return arg === null;
6762 exports.isNull = isNull;
6764 function isNullOrUndefined(arg) {
6767 exports.isNullOrUndefined = isNullOrUndefined;
6769 function isNumber(arg) {
6770 return typeof arg === 'number';
6772 exports.isNumber = isNumber;
6774 function isString(arg) {
6775 return typeof arg === 'string';
6777 exports.isString = isString;
6779 function isSymbol(arg) {
6780 return typeof arg === 'symbol';
6782 exports.isSymbol = isSymbol;
6784 function isUndefined(arg) {
6785 return arg === void
0;
6787 exports.isUndefined = isUndefined;
6789 function isRegExp(re) {
6790 return isObject(re) && objectToString(re) === '[object RegExp]';
6792 exports.isRegExp = isRegExp;
6794 function isObject(arg) {
6795 return typeof arg === 'object' && arg !== null;
6797 exports.isObject = isObject;
6799 function isDate(d) {
6800 return isObject(d) && objectToString(d) === '[object Date]';
6802 exports.isDate = isDate;
6804 function isError(e) {
6805 return isObject(e) &&
6806 (objectToString(e) === '[object Error]' || e instanceof Error);
6808 exports.isError = isError;
6810 function isFunction(arg) {
6811 return typeof arg === 'function';
6813 exports.isFunction = isFunction;
6815 function isPrimitive(arg) {
6816 return arg === null ||
6817 typeof arg === 'boolean' ||
6818 typeof arg === 'number' ||
6819 typeof arg === 'string' ||
6820 typeof arg === 'symbol' || // ES6 symbol
6821 typeof arg === 'undefined';
6823 exports.isPrimitive = isPrimitive;
6825 function isBuffer(arg) {
6826 return Buffer.isBuffer(arg);
6828 exports.isBuffer = isBuffer;
6830 function objectToString(o) {
6831 return Object.prototype.toString.call(o);
6833 }).call(this,require(
"buffer").Buffer)
6834 },{
"buffer":
7}],
22:[function(require,module,exports){
6835 module.exports = require(
"./lib/_stream_passthrough.js")
6837 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6838 exports = module.exports = require('./lib/_stream_readable.js');
6839 exports.Stream = require('stream');
6840 exports.Readable = exports;
6841 exports.Writable = require('./lib/_stream_writable.js');
6842 exports.Duplex = require('./lib/_stream_duplex.js');
6843 exports.Transform = require('./lib/_stream_transform.js');
6844 exports.PassThrough = require('./lib/_stream_passthrough.js');
6846 },{
"./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){
6847 module.exports = require(
"./lib/_stream_transform.js")
6849 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6850 module.exports = require(
"./lib/_stream_writable.js")
6852 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6853 // Copyright Joyent, Inc. and other Node contributors.
6855 // Permission is hereby granted, free of charge, to any person obtaining a
6856 // copy of this software and associated documentation files (the
6857 //
"Software"), to deal in the Software without restriction, including
6858 // without limitation the rights to use, copy, modify, merge, publish,
6859 // distribute, sublicense, and/or sell copies of the Software, and to permit
6860 // persons to whom the Software is furnished to do so, subject to the
6861 // following conditions:
6863 // The above copyright notice and this permission notice shall be included
6864 // in all copies or substantial portions of the Software.
6866 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6867 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6868 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6869 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6870 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6871 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6872 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6874 module.exports = Stream;
6876 var EE = require('events').EventEmitter;
6877 var inherits = require('inherits');
6879 inherits(Stream, EE);
6880 Stream.Readable = require('readable-stream/readable.js');
6881 Stream.Writable = require('readable-stream/writable.js');
6882 Stream.Duplex = require('readable-stream/duplex.js');
6883 Stream.Transform = require('readable-stream/transform.js');
6884 Stream.PassThrough = require('readable-stream/passthrough.js');
6886 // Backwards-compat with node
0.4.x
6887 Stream.Stream = Stream;
6891 // old-style streams. Note that the pipe method (the only relevant
6892 // part of this class) is overridden in the Readable class.
6898 Stream.prototype.pipe = function(dest, options) {
6901 function ondata(chunk) {
6902 if (dest.writable) {
6903 if (false === dest.write(chunk) && source.pause) {
6909 source.on('data', ondata);
6911 function ondrain() {
6912 if (source.readable && source.resume) {
6917 dest.on('drain', ondrain);
6919 // If the 'end' option is not supplied, dest.end() will be called when
6920 // source gets the 'end' or 'close' events. Only dest.end() once.
6921 if (!dest._isStdio && (!options || options.end !== false)) {
6922 source.on('end', onend);
6923 source.on('close', onclose);
6926 var didOnEnd = false;
6928 if (didOnEnd) return;
6935 function onclose() {
6936 if (didOnEnd) return;
6939 if (typeof dest.destroy === 'function') dest.destroy();
6942 // don't leave dangling pipes when there are errors.
6943 function onerror(er) {
6945 if (EE.listenerCount(this, 'error') ===
0) {
6946 throw er; // Unhandled stream error in pipe.
6950 source.on('error', onerror);
6951 dest.on('error', onerror);
6953 // remove all the event listeners that were added.
6954 function cleanup() {
6955 source.removeListener('data', ondata);
6956 dest.removeListener('drain', ondrain);
6958 source.removeListener('end', onend);
6959 source.removeListener('close', onclose);
6961 source.removeListener('error', onerror);
6962 dest.removeListener('error', onerror);
6964 source.removeListener('end', cleanup);
6965 source.removeListener('close', cleanup);
6967 dest.removeListener('close', cleanup);
6970 source.on('end', cleanup);
6971 source.on('close', cleanup);
6973 dest.on('close', cleanup);
6975 dest.emit('pipe', source);
6977 // Allow for unix-like usage: A.pipe(B).pipe(C)
6981 },{
"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){
6982 // Copyright Joyent, Inc. and other Node contributors.
6984 // Permission is hereby granted, free of charge, to any person obtaining a
6985 // copy of this software and associated documentation files (the
6986 //
"Software"), to deal in the Software without restriction, including
6987 // without limitation the rights to use, copy, modify, merge, publish,
6988 // distribute, sublicense, and/or sell copies of the Software, and to permit
6989 // persons to whom the Software is furnished to do so, subject to the
6990 // following conditions:
6992 // The above copyright notice and this permission notice shall be included
6993 // in all copies or substantial portions of the Software.
6995 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6996 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6997 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6998 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6999 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7000 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7001 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7003 var Buffer = require('buffer').Buffer;
7005 var isBufferEncoding = Buffer.isEncoding
7006 || function(encoding) {
7007 switch (encoding && encoding.toLowerCase()) {
7008 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;
7009 default: return false;
7014 function assertEncoding(encoding) {
7015 if (encoding && !isBufferEncoding(encoding)) {
7016 throw new Error('Unknown encoding: ' + encoding);
7020 // StringDecoder provides an interface for efficiently splitting a series of
7021 // buffers into a series of JS strings without breaking apart multi-byte
7022 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
7024 // @TODO Handling all encodings inside a single object makes it very difficult
7025 // to reason about this code, so it should be split up in the future.
7026 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
7027 // points as used by CESU-
8.
7028 var StringDecoder = exports.StringDecoder = function(encoding) {
7029 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7030 assertEncoding(encoding);
7031 switch (this.encoding) {
7033 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7034 this.surrogateSize =
3;
7038 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7039 this.surrogateSize =
2;
7040 this.detectIncompleteChar = utf16DetectIncompleteChar;
7043 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7044 this.surrogateSize =
3;
7045 this.detectIncompleteChar = base64DetectIncompleteChar;
7048 this.write = passThroughWrite;
7052 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7053 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7054 this.charBuffer = new Buffer(
6);
7055 // Number of bytes received for the current incomplete multi-byte character.
7056 this.charReceived =
0;
7057 // Number of bytes expected for the current incomplete multi-byte character.
7058 this.charLength =
0;
7062 // write decodes the given buffer and returns it as JS string that is
7063 // guaranteed to not contain any partial multi-byte characters. Any partial
7064 // character found at the end of the buffer is buffered up, and will be
7065 // returned when calling write again with the remaining bytes.
7067 // Note: Converting a Buffer containing an orphan surrogate to a String
7068 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7069 // Buffer#write) will replace incomplete surrogates with the unicode
7070 // replacement character. See https://codereview.chromium.org/
121173009/ .
7071 StringDecoder.prototype.write = function(buffer) {
7073 // if our last write ended with an incomplete multibyte character
7074 while (this.charLength) {
7075 // determine how many remaining bytes this buffer has to offer for this char
7076 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7077 this.charLength - this.charReceived :
7080 // add the new bytes to the char buffer
7081 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7082 this.charReceived += available;
7084 if (this.charReceived < this.charLength) {
7085 // still not enough chars in this buffer? wait for more ...
7089 // remove bytes belonging to the current character from the buffer
7090 buffer = buffer.slice(available, buffer.length);
7092 // get the character that was split
7093 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7095 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7096 var charCode = charStr.charCodeAt(charStr.length -
1);
7097 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7098 this.charLength += this.surrogateSize;
7102 this.charReceived = this.charLength =
0;
7104 // if there are no more bytes in this buffer, just emit our char
7105 if (buffer.length ===
0) {
7111 // determine and set charLength / charReceived
7112 this.detectIncompleteChar(buffer);
7114 var end = buffer.length;
7115 if (this.charLength) {
7116 // buffer the incomplete character bytes we got
7117 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7118 end -= this.charReceived;
7121 charStr += buffer.toString(this.encoding,
0, end);
7123 var end = charStr.length -
1;
7124 var charCode = charStr.charCodeAt(end);
7125 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7126 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7127 var size = this.surrogateSize;
7128 this.charLength += size;
7129 this.charReceived += size;
7130 this.charBuffer.copy(this.charBuffer, size,
0, size);
7131 buffer.copy(this.charBuffer,
0,
0, size);
7132 return charStr.substring(
0, end);
7135 // or just emit the charStr
7139 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7140 // the end of the given buffer. If so, it sets this.charLength to the byte
7141 // length that character, and sets this.charReceived to the number of bytes
7142 // that are available for this character.
7143 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7144 // determine how many bytes we have to check at the end of this buffer
7145 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7147 // Figure out if one of the last i bytes of our buffer announces an
7149 for (; i
> 0; i--) {
7150 var c = buffer[buffer.length - i];
7152 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7155 if (i ==
1 && c
>> 5 ==
0x06) {
7156 this.charLength =
2;
7161 if (i <=
2 && c
>> 4 ==
0x0E) {
7162 this.charLength =
3;
7167 if (i <=
3 && c
>> 3 ==
0x1E) {
7168 this.charLength =
4;
7172 this.charReceived = i;
7175 StringDecoder.prototype.end = function(buffer) {
7177 if (buffer && buffer.length)
7178 res = this.write(buffer);
7180 if (this.charReceived) {
7181 var cr = this.charReceived;
7182 var buf = this.charBuffer;
7183 var enc = this.encoding;
7184 res += buf.slice(
0, cr).toString(enc);
7190 function passThroughWrite(buffer) {
7191 return buffer.toString(this.encoding);
7194 function utf16DetectIncompleteChar(buffer) {
7195 this.charReceived = buffer.length %
2;
7196 this.charLength = this.charReceived ?
2 :
0;
7199 function base64DetectIncompleteChar(buffer) {
7200 this.charReceived = buffer.length %
3;
7201 this.charLength = this.charReceived ?
3 :
0;
7204 },{
"buffer":
7}],
28:[function(require,module,exports){
7205 module.exports = function isBuffer(arg) {
7206 return arg && typeof arg === 'object'
7207 && typeof arg.copy === 'function'
7208 && typeof arg.fill === 'function'
7209 && typeof arg.readUInt8 === 'function';
7211 },{}],
29:[function(require,module,exports){
7212 (function (process,global){
7213 // Copyright Joyent, Inc. and other Node contributors.
7215 // Permission is hereby granted, free of charge, to any person obtaining a
7216 // copy of this software and associated documentation files (the
7217 //
"Software"), to deal in the Software without restriction, including
7218 // without limitation the rights to use, copy, modify, merge, publish,
7219 // distribute, sublicense, and/or sell copies of the Software, and to permit
7220 // persons to whom the Software is furnished to do so, subject to the
7221 // following conditions:
7223 // The above copyright notice and this permission notice shall be included
7224 // in all copies or substantial portions of the Software.
7226 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7227 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7228 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7229 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7230 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7231 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7232 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7234 var formatRegExp = /%[sdj%]/g;
7235 exports.format = function(f) {
7238 for (var i =
0; i < arguments.length; i++) {
7239 objects.push(inspect(arguments[i]));
7241 return objects.join(' ');
7245 var args = arguments;
7246 var len = args.length;
7247 var str = String(f).replace(formatRegExp, function(x) {
7248 if (x === '%%') return '%';
7249 if (i
>= len) return x;
7251 case '%s': return String(args[i++]);
7252 case '%d': return Number(args[i++]);
7255 return JSON.stringify(args[i++]);
7257 return '[Circular]';
7263 for (var x = args[i]; i < len; x = args[++i]) {
7264 if (isNull(x) || !isObject(x)) {
7267 str += ' ' + inspect(x);
7274 // Mark that a method should not be used.
7275 // Returns a modified function which warns once by default.
7276 // If --no-deprecation is set, then it is a no-op.
7277 exports.deprecate = function(fn, msg) {
7278 // Allow for deprecating things in the process of starting up.
7279 if (isUndefined(global.process)) {
7281 return exports.deprecate(fn, msg).apply(this, arguments);
7285 if (process.noDeprecation === true) {
7290 function deprecated() {
7292 if (process.throwDeprecation) {
7293 throw new Error(msg);
7294 } else if (process.traceDeprecation) {
7301 return fn.apply(this, arguments);
7310 exports.debuglog = function(set) {
7311 if (isUndefined(debugEnviron))
7312 debugEnviron = process.env.NODE_DEBUG || '';
7313 set = set.toUpperCase();
7315 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7316 var pid = process.pid;
7317 debugs[set] = function() {
7318 var msg = exports.format.apply(exports, arguments);
7319 console.error('%s %d: %s', set, pid, msg);
7322 debugs[set] = function() {};
7330 * Echos the value of a value. Trys to print the value out
7331 * in the best way possible given the different types.
7333 * @param {Object} obj The object to print out.
7334 * @param {Object} opts Optional options object that alters the output.
7336 /* legacy: obj, showHidden, depth, colors*/
7337 function inspect(obj, opts) {
7341 stylize: stylizeNoColor
7344 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7345 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7346 if (isBoolean(opts)) {
7348 ctx.showHidden = opts;
7350 // got an "options" object
7351 exports._extend(ctx, opts);
7353 // set default options
7354 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7355 if (isUndefined(ctx.depth)) ctx.depth =
2;
7356 if (isUndefined(ctx.colors)) ctx.colors = false;
7357 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7358 if (ctx.colors) ctx.stylize = stylizeWithColor;
7359 return formatValue(ctx, obj, ctx.depth);
7361 exports.inspect = inspect;
7364 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7368 'underline' : [
4,
24],
7369 'inverse' : [
7,
27],
7376 'magenta' : [
35,
39],
7381 // Don't use 'blue' not visible on cmd.exe
7385 'boolean': 'yellow',
7386 'undefined': 'grey',
7390 // "name": intentionally not styling
7395 function stylizeWithColor(str, styleType) {
7396 var style = inspect.styles[styleType];
7399 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7400 '\u001b[' + inspect.colors[style][
1] + 'm';
7407 function stylizeNoColor(str, styleType) {
7412 function arrayToHash(array) {
7415 array.forEach(function(val, idx) {
7423 function formatValue(ctx, value, recurseTimes) {
7424 // Provide a hook for user-specified inspect functions.
7425 // Check that value is an object with an inspect function on it
7426 if (ctx.customInspect &&
7428 isFunction(value.inspect) &&
7429 // Filter out the util module, it's inspect function is special
7430 value.inspect !== exports.inspect &&
7431 // Also filter out any prototype objects using the circular check.
7432 !(value.constructor && value.constructor.prototype === value)) {
7433 var ret = value.inspect(recurseTimes, ctx);
7434 if (!isString(ret)) {
7435 ret = formatValue(ctx, ret, recurseTimes);
7440 // Primitive types cannot have properties
7441 var primitive = formatPrimitive(ctx, value);
7446 // Look up the keys of the object.
7447 var keys = Object.keys(value);
7448 var visibleKeys = arrayToHash(keys);
7450 if (ctx.showHidden) {
7451 keys = Object.getOwnPropertyNames(value);
7454 // IE doesn't make error fields non-enumerable
7455 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7457 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7458 return formatError(value);
7461 // Some type of object without properties can be shortcutted.
7462 if (keys.length ===
0) {
7463 if (isFunction(value)) {
7464 var name = value.name ? ': ' + value.name : '';
7465 return ctx.stylize('[Function' + name + ']', 'special');
7467 if (isRegExp(value)) {
7468 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7470 if (isDate(value)) {
7471 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7473 if (isError(value)) {
7474 return formatError(value);
7478 var base = '', array = false, braces = ['{', '}'];
7480 // Make Array say that they are Array
7481 if (isArray(value)) {
7483 braces = ['[', ']'];
7486 // Make functions say that they are functions
7487 if (isFunction(value)) {
7488 var n = value.name ? ': ' + value.name : '';
7489 base = ' [Function' + n + ']';
7492 // Make RegExps say that they are RegExps
7493 if (isRegExp(value)) {
7494 base = ' ' + RegExp.prototype.toString.call(value);
7497 // Make dates with properties first say the date
7498 if (isDate(value)) {
7499 base = ' ' + Date.prototype.toUTCString.call(value);
7502 // Make error with message first say the error
7503 if (isError(value)) {
7504 base = ' ' + formatError(value);
7507 if (keys.length ===
0 && (!array || value.length ==
0)) {
7508 return braces[
0] + base + braces[
1];
7511 if (recurseTimes <
0) {
7512 if (isRegExp(value)) {
7513 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7515 return ctx.stylize('[Object]', 'special');
7519 ctx.seen.push(value);
7523 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7525 output = keys.map(function(key) {
7526 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7532 return reduceToSingleString(output, base, braces);
7536 function formatPrimitive(ctx, value) {
7537 if (isUndefined(value))
7538 return ctx.stylize('undefined', 'undefined');
7539 if (isString(value)) {
7540 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7541 .replace(/'/g, "\\'")
7542 .replace(/\\"/g, '"') + '\'';
7543 return ctx.stylize(simple, 'string');
7545 if (isNumber(value))
7546 return ctx.stylize('' + value, 'number');
7547 if (isBoolean(value))
7548 return ctx.stylize('' + value, 'boolean');
7549 // For some reason typeof null is "object", so special case here.
7551 return ctx.stylize('null', 'null');
7555 function formatError(value) {
7556 return '[' + Error.prototype.toString.call(value) + ']';
7560 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7562 for (var i =
0, l = value.length; i < l; ++i) {
7563 if (hasOwnProperty(value, String(i))) {
7564 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7570 keys.forEach(function(key) {
7571 if (!key.match(/^\d+$/)) {
7572 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7580 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7581 var name, str, desc;
7582 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7585 str = ctx.stylize('[Getter/Setter]', 'special');
7587 str = ctx.stylize('[Getter]', 'special');
7591 str = ctx.stylize('[Setter]', 'special');
7594 if (!hasOwnProperty(visibleKeys, key)) {
7595 name = '[' + key + ']';
7598 if (ctx.seen.indexOf(desc.value) <
0) {
7599 if (isNull(recurseTimes)) {
7600 str = formatValue(ctx, desc.value, null);
7602 str = formatValue(ctx, desc.value, recurseTimes -
1);
7604 if (str.indexOf('\n')
> -
1) {
7606 str = str.split('\n').map(function(line) {
7608 }).join('\n').substr(
2);
7610 str = '\n' + str.split('\n').map(function(line) {
7616 str = ctx.stylize('[Circular]', 'special');
7619 if (isUndefined(name)) {
7620 if (array && key.match(/^\d+$/)) {
7623 name = JSON.stringify('' + key);
7624 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7625 name = name.substr(
1, name.length -
2);
7626 name = ctx.stylize(name, 'name');
7628 name = name.replace(/'/g, "\\'")
7629 .replace(/\\"/g, '"')
7630 .replace(/(^"|"$)/g, "'");
7631 name = ctx.stylize(name, 'string');
7635 return name + ': ' + str;
7639 function reduceToSingleString(output, base, braces) {
7640 var numLinesEst =
0;
7641 var length = output.reduce(function(prev, cur) {
7643 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7644 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7649 (base === '' ? '' : base + '\n ') +
7651 output.join(',\n ') +
7656 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7660 // NOTE: These type checking functions intentionally don't use `instanceof`
7661 // because it is fragile and can be easily faked with `Object.create()`.
7662 function isArray(ar) {
7663 return Array.isArray(ar);
7665 exports.isArray = isArray;
7667 function isBoolean(arg) {
7668 return typeof arg === 'boolean';
7670 exports.isBoolean = isBoolean;
7672 function isNull(arg) {
7673 return arg === null;
7675 exports.isNull = isNull;
7677 function isNullOrUndefined(arg) {
7680 exports.isNullOrUndefined = isNullOrUndefined;
7682 function isNumber(arg) {
7683 return typeof arg === 'number';
7685 exports.isNumber = isNumber;
7687 function isString(arg) {
7688 return typeof arg === 'string';
7690 exports.isString = isString;
7692 function isSymbol(arg) {
7693 return typeof arg === 'symbol';
7695 exports.isSymbol = isSymbol;
7697 function isUndefined(arg) {
7698 return arg === void
0;
7700 exports.isUndefined = isUndefined;
7702 function isRegExp(re) {
7703 return isObject(re) && objectToString(re) === '[object RegExp]';
7705 exports.isRegExp = isRegExp;
7707 function isObject(arg) {
7708 return typeof arg === 'object' && arg !== null;
7710 exports.isObject = isObject;
7712 function isDate(d) {
7713 return isObject(d) && objectToString(d) === '[object Date]';
7715 exports.isDate = isDate;
7717 function isError(e) {
7718 return isObject(e) &&
7719 (objectToString(e) === '[object Error]' || e instanceof Error);
7721 exports.isError = isError;
7723 function isFunction(arg) {
7724 return typeof arg === 'function';
7726 exports.isFunction = isFunction;
7728 function isPrimitive(arg) {
7729 return arg === null ||
7730 typeof arg === 'boolean' ||
7731 typeof arg === 'number' ||
7732 typeof arg === 'string' ||
7733 typeof arg === 'symbol' || // ES6 symbol
7734 typeof arg === 'undefined';
7736 exports.isPrimitive = isPrimitive;
7738 exports.isBuffer = require('./support/isBuffer');
7740 function objectToString(o) {
7741 return Object.prototype.toString.call(o);
7746 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7750 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7751 'Oct', 'Nov', 'Dec'];
7754 function timestamp() {
7756 var time = [pad(d.getHours()),
7757 pad(d.getMinutes()),
7758 pad(d.getSeconds())].join(':');
7759 return [d.getDate(), months[d.getMonth()], time].join(' ');
7763 // log is just a thin wrapper to console.log that prepends a timestamp
7764 exports.log = function() {
7765 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7770 * Inherit the prototype methods from one constructor into another.
7772 * The Function.prototype.inherits from lang.js rewritten as a standalone
7773 * function (not on Function.prototype). NOTE: If this file is to be loaded
7774 * during bootstrapping this function needs to be rewritten using some native
7775 * functions as prototype setup using normal JavaScript does not work as
7776 * expected during bootstrapping (see mirror.js in r114903).
7778 * @param {function} ctor Constructor function which needs to inherit the
7780 * @param {function} superCtor Constructor function to inherit prototype from.
7782 exports.inherits = require('inherits');
7784 exports._extend = function(origin, add) {
7785 // Don't do anything if add isn't an object
7786 if (!add || !isObject(add)) return origin;
7788 var keys = Object.keys(add);
7789 var i = keys.length;
7791 origin[keys[i]] = add[keys[i]];
7796 function hasOwnProperty(obj, prop) {
7797 return Object.prototype.hasOwnProperty.call(obj, prop);
7800 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7801 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7802 // Base58 encoding/decoding
7803 // Originally written by Mike Hearn for BitcoinJ
7804 // Copyright (c)
2011 Google Inc
7805 // Ported to JavaScript by Stefan Thomas
7806 // Merged Buffer refactorings from base58-native by Stephen Pair
7807 // Copyright (c)
2013 BitPay Inc
7809 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7810 var ALPHABET_MAP = {}
7811 for(var i =
0; i < ALPHABET.length; i++) {
7812 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7816 function encode(buffer) {
7817 if (buffer.length ===
0) return ''
7819 var i, j, digits = [
0]
7820 for (i =
0; i < buffer.length; i++) {
7821 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7823 digits[
0] += buffer[i]
7826 for (j =
0; j < digits.length; ++j) {
7829 carry = (digits[j] / BASE) |
0
7834 digits.push(carry % BASE)
7836 carry = (carry / BASE) |
0
7840 // deal with leading zeros
7841 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7843 // convert digits to a string
7844 var stringOutput =
""
7845 for (var i = digits.length -
1; i
>=
0; i--) {
7846 stringOutput = stringOutput + ALPHABET[digits[i]]
7851 function decode(string) {
7852 if (string.length ===
0) return []
7854 var i, j, bytes = [
0]
7855 for (i =
0; i < string.length; i++) {
7857 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7859 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7860 bytes[
0] += ALPHABET_MAP[c]
7863 for (j =
0; j < bytes.length; ++j) {
7866 carry = bytes[j]
>> 8
7871 bytes.push(carry &
0xff)
7877 // deal with leading zeros
7878 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7880 return bytes.reverse()
7888 },{}],
31:[function(require,module,exports){
7892 var base58 = require('bs58')
7893 var createHash = require('create-hash')
7895 // SHA256(SHA256(buffer))
7896 function sha256x2 (buffer) {
7897 buffer = createHash('sha256').update(buffer).digest()
7898 return createHash('sha256').update(buffer).digest()
7901 // Encode a buffer as a base58-check encoded string
7902 function encode (payload) {
7903 var checksum = sha256x2(payload).slice(
0,
4)
7905 return base58.encode(Buffer.concat([
7911 // Decode a base58-check encoded string to a buffer
7912 function decode (string) {
7913 var buffer = new Buffer(base58.decode(string))
7915 var payload = buffer.slice(
0, -
4)
7916 var checksum = buffer.slice(-
4)
7917 var newChecksum = sha256x2(payload).slice(
0,
4)
7919 for (var i =
0; i < newChecksum.length; ++i) {
7920 if (newChecksum[i] === checksum[i]) continue
7922 throw new Error('Invalid checksum')
7933 }).call(this,require("buffer").Buffer)
7934 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7937 var inherits = require('inherits')
7938 var md5 = require('./md5')
7939 var rmd160 = require('ripemd160')
7940 var sha = require('sha.js')
7942 var Transform = require('stream').Transform
7944 function HashNoConstructor(hash) {
7945 Transform.call(this)
7951 inherits(HashNoConstructor, Transform)
7953 HashNoConstructor.prototype._transform = function (data, _, next) {
7954 this.buffers.push(data)
7959 HashNoConstructor.prototype._flush = function (next) {
7960 this.push(this.digest())
7964 HashNoConstructor.prototype.update = function (data, enc) {
7965 if (typeof data === 'string') {
7966 data = new Buffer(data, enc)
7969 this.buffers.push(data)
7973 HashNoConstructor.prototype.digest = function (enc) {
7974 var buf = Buffer.concat(this.buffers)
7975 var r = this._hash(buf)
7978 return enc ? r.toString(enc) : r
7981 function Hash(hash) {
7982 Transform.call(this)
7987 inherits(Hash, Transform)
7989 Hash.prototype._transform = function (data, enc, next) {
7990 if (enc) data = new Buffer(data, enc)
7992 this._hash.update(data)
7997 Hash.prototype._flush = function (next) {
7998 this.push(this._hash.digest())
8004 Hash.prototype.update = function (data, enc) {
8005 if (typeof data === 'string') {
8006 data = new Buffer(data, enc)
8009 this._hash.update(data)
8013 Hash.prototype.digest = function (enc) {
8014 var outData = this._hash.digest()
8016 return enc ? outData.toString(enc) : outData
8019 module.exports = function createHash (alg) {
8020 if ('md5' === alg) return new HashNoConstructor(md5)
8021 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8023 return new Hash(sha(alg))
8026 }).call(this,require("buffer").Buffer)
8027 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
8031 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8034 function toArray(buf, bigEndian) {
8035 if ((buf.length % intSize) !==
0) {
8036 var len = buf.length + (intSize - (buf.length % intSize));
8037 buf = Buffer.concat([buf, zeroBuffer], len);
8041 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8042 for (var i =
0; i < buf.length; i += intSize) {
8043 arr.push(fn.call(buf, i));
8048 function toBuffer(arr, size, bigEndian) {
8049 var buf = new Buffer(size);
8050 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8051 for (var i =
0; i < arr.length; i++) {
8052 fn.call(buf, arr[i], i *
4, true);
8057 function hash(buf, fn, hashSize, bigEndian) {
8058 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8059 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8060 return toBuffer(arr, hashSize, bigEndian);
8062 exports.hash = hash;
8063 }).call(this,require("buffer").Buffer)
8064 },{"buffer":
7}],
34:[function(require,module,exports){
8067 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8068 * Digest Algorithm, as defined in RFC
1321.
8069 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8070 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8071 * Distributed under the BSD License
8072 * See http://pajhome.org.uk/crypt/md5 for more info.
8075 var helpers = require('./helpers');
8078 * Calculate the MD5 of an array of little-endian words, and a bit length
8080 function core_md5(x, len)
8082 /* append padding */
8083 x[len
>> 5] |=
0x80 << ((len) %
32);
8084 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8088 var c = -
1732584194;
8091 for(var i =
0; i < x.length; i +=
16)
8098 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8099 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8100 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8101 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8102 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8103 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8104 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8105 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8106 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8107 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8108 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8109 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8110 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8111 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8112 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8113 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8115 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8116 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8117 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8118 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8119 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8120 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8121 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8122 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8123 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8124 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8125 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8126 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8127 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8128 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8129 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8130 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8132 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8133 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8134 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8135 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8136 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8137 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8138 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8139 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8140 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8141 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8142 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8143 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8144 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8145 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8146 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8147 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8149 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8150 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8151 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8152 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8153 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8154 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8155 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8156 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8157 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8158 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8159 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8160 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8161 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8162 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8163 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8164 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8166 a = safe_add(a, olda);
8167 b = safe_add(b, oldb);
8168 c = safe_add(c, oldc);
8169 d = safe_add(d, oldd);
8171 return Array(a, b, c, d);
8176 * These functions implement the four basic operations the algorithm uses.
8178 function md5_cmn(q, a, b, x, s, t)
8180 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8182 function md5_ff(a, b, c, d, x, s, t)
8184 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8186 function md5_gg(a, b, c, d, x, s, t)
8188 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8190 function md5_hh(a, b, c, d, x, s, t)
8192 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8194 function md5_ii(a, b, c, d, x, s, t)
8196 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8200 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8201 * to work around bugs in some JS interpreters.
8203 function safe_add(x, y)
8205 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8206 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8207 return (msw <<
16) | (lsw &
0xFFFF);
8211 * Bitwise rotate a
32-bit number to the left.
8213 function bit_rol(num, cnt)
8215 return (num << cnt) | (num
>>> (
32 - cnt));
8218 module.exports = function md5(buf) {
8219 return helpers.hash(buf, core_md5,
16);
8221 },{"./helpers":
33}],
35:[function(require,module,exports){
8222 arguments[
4][
12][
0].apply(exports,arguments)
8223 },{"dup":
12}],
36:[function(require,module,exports){
8227 code.google.com/p/crypto-js
8228 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8229 code.google.com/p/crypto-js/wiki/License
8232 (c)
2012 by Cédric Mesnil. All rights reserved.
8234 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8236 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8237 - 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.
8239 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.
8244 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8245 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8246 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8247 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8248 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8252 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8253 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8254 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8255 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8256 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8260 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8261 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8262 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8263 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8264 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8268 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8269 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8270 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8271 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8272 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8275 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8276 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8278 function bytesToWords (bytes) {
8280 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8281 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8286 function wordsToBytes (words) {
8288 for (var b =
0; b < words.length *
32; b +=
8) {
8289 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8294 function processBlock (H, M, offset) {
8296 for (var i =
0; i <
16; i++) {
8297 var offset_i = offset + i
8298 var M_offset_i = M[offset_i]
8302 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8303 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8307 // Working variables
8308 var al, bl, cl, dl, el
8309 var ar, br, cr, dr, er
8319 for (i =
0; i <
80; i +=
1) {
8320 t = (al + M[offset + zl[i]]) |
0
8322 t += f1(bl, cl, dl) + hl[
0]
8323 } else if (i <
32) {
8324 t += f2(bl, cl, dl) + hl[
1]
8325 } else if (i <
48) {
8326 t += f3(bl, cl, dl) + hl[
2]
8327 } else if (i <
64) {
8328 t += f4(bl, cl, dl) + hl[
3]
8329 } else {// if (i
<80) {
8330 t += f5(bl, cl, dl) + hl[
4]
8341 t = (ar + M[offset + zr[i]]) |
0
8343 t += f5(br, cr, dr) + hr[
0]
8344 } else if (i <
32) {
8345 t += f4(br, cr, dr) + hr[
1]
8346 } else if (i <
48) {
8347 t += f3(br, cr, dr) + hr[
2]
8348 } else if (i <
64) {
8349 t += f2(br, cr, dr) + hr[
3]
8350 } else {// if (i
<80) {
8351 t += f1(br, cr, dr) + hr[
4]
8364 // intermediate hash value
8365 t = (H[
1] + cl + dr) |
0
8366 H[
1] = (H[
2] + dl + er) |
0
8367 H[
2] = (H[
3] + el + ar) |
0
8368 H[
3] = (H[
4] + al + br) |
0
8369 H[
4] = (H[
0] + bl + cr) |
0
8373 function f1 (x, y, z) {
8374 return ((x) ^ (y) ^ (z))
8377 function f2 (x, y, z) {
8378 return (((x) & (y)) | ((~x) & (z)))
8381 function f3 (x, y, z) {
8382 return (((x) | (~(y))) ^ (z))
8385 function f4 (x, y, z) {
8386 return (((x) & (z)) | ((y) & (~(z))))
8389 function f5 (x, y, z) {
8390 return ((x) ^ ((y) | (~(z))))
8393 function rotl (x, n) {
8394 return (x << n) | (x
>>> (
32 - n))
8397 function ripemd160 (message) {
8398 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8400 if (typeof message === 'string') {
8401 message = new Buffer(message, 'utf8')
8404 var m = bytesToWords(message)
8406 var nBitsLeft = message.length *
8
8407 var nBitsTotal = message.length *
8
8410 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8411 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8412 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8413 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8416 for (var i =
0; i < m.length; i +=
16) {
8417 processBlock(H, m, i)
8421 for (i =
0; i <
5; i++) {
8426 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8427 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8430 var digestbytes = wordsToBytes(H)
8431 return new Buffer(digestbytes)
8434 module.exports = ripemd160
8436 }).call(this,require(
"buffer").Buffer)
8437 },{
"buffer":
7}],
37:[function(require,module,exports){
8439 // prototype class for hash functions
8440 function Hash (blockSize, finalSize) {
8441 this._block = new Buffer(blockSize)
8442 this._finalSize = finalSize
8443 this._blockSize = blockSize
8448 Hash.prototype.update = function (data, enc) {
8449 if (typeof data === 'string') {
8451 data = new Buffer(data, enc)
8454 var l = this._len += data.length
8455 var s = this._s ||
0
8457 var buffer = this._block
8460 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8463 for (var i =
0; i < ch; i++) {
8464 buffer[(s % this._blockSize) + i] = data[i + f]
8470 if ((s % this._blockSize) ===
0) {
8471 this._update(buffer)
8479 Hash.prototype.digest = function (enc) {
8480 // Suppose the length of the message M, in bits, is l
8481 var l = this._len *
8
8483 // Append the bit
1 to the end of the message
8484 this._block[this._len % this._blockSize] =
0x80
8486 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8487 this._block.fill(
0, this._len % this._blockSize +
1)
8489 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8490 this._update(this._block)
8494 // to this append the block which is equal to the number l written in binary
8495 // TODO: handle case where l is
> Math.pow(
2,
29)
8496 this._block.writeInt32BE(l, this._blockSize -
4)
8498 var hash = this._update(this._block) || this._hash()
8500 return enc ? hash.toString(enc) : hash
8503 Hash.prototype._update = function () {
8504 throw new Error('_update must be implemented by subclass')
8507 module.exports = Hash
8509 }).call(this,require("buffer").Buffer)
8510 },{"buffer":
7}],
38:[function(require,module,exports){
8511 var exports = module.exports = function SHA (algorithm) {
8512 algorithm = algorithm.toLowerCase()
8514 var Algorithm = exports[algorithm]
8515 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8517 return new Algorithm()
8520 exports.sha = require('./sha')
8521 exports.sha1 = require('./sha1')
8522 exports.sha224 = require('./sha224')
8523 exports.sha256 = require('./sha256')
8524 exports.sha384 = require('./sha384')
8525 exports.sha512 = require('./sha512')
8527 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8530 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8532 * This source code is derived from sha1.js of the same repository.
8533 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8534 * operation was added.
8537 var inherits = require('inherits')
8538 var Hash = require('./hash')
8540 var W = new Array(
80)
8546 Hash.call(this,
64,
56)
8551 Sha.prototype.init = function () {
8552 this._a =
0x67452301 |
0
8553 this._b =
0xefcdab89 |
0
8554 this._c =
0x98badcfe |
0
8555 this._d =
0x10325476 |
0
8556 this._e =
0xc3d2e1f0 |
0
8562 * Bitwise rotate a
32-bit number to the left.
8564 function rol (num, cnt) {
8565 return (num << cnt) | (num
>>> (
32 - cnt))
8568 Sha.prototype._update = function (M) {
8580 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8581 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8583 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8584 function loop (w, f) {
8587 var t = rol(a,
5) + f + e + w + k
8598 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8599 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8601 while (j <
40) loop(calcW(), b ^ c ^ d)
8603 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8605 while (j <
80) loop(calcW(), b ^ c ^ d)
8607 this._a = (a + this._a) |
0
8608 this._b = (b + this._b) |
0
8609 this._c = (c + this._c) |
0
8610 this._d = (d + this._d) |
0
8611 this._e = (e + this._e) |
0
8614 Sha.prototype._hash = function () {
8615 var H = new Buffer(
20)
8617 H.writeInt32BE(this._a |
0,
0)
8618 H.writeInt32BE(this._b |
0,
4)
8619 H.writeInt32BE(this._c |
0,
8)
8620 H.writeInt32BE(this._d |
0,
12)
8621 H.writeInt32BE(this._e |
0,
16)
8626 module.exports = Sha
8629 }).call(this,require("buffer").Buffer)
8630 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8633 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8635 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8636 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8637 * Distributed under the BSD License
8638 * See http://pajhome.org.uk/crypt/md5 for details.
8641 var inherits = require('inherits')
8642 var Hash = require('./hash')
8644 var W = new Array(
80)
8650 Hash.call(this,
64,
56)
8653 inherits(Sha1, Hash)
8655 Sha1.prototype.init = function () {
8656 this._a =
0x67452301 |
0
8657 this._b =
0xefcdab89 |
0
8658 this._c =
0x98badcfe |
0
8659 this._d =
0x10325476 |
0
8660 this._e =
0xc3d2e1f0 |
0
8666 * Bitwise rotate a
32-bit number to the left.
8668 function rol (num, cnt) {
8669 return (num << cnt) | (num
>>> (
32 - cnt))
8672 Sha1.prototype._update = function (M) {
8683 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8684 function loop (w, f) {
8687 var t = rol(a,
5) + f + e + w + k
8698 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8699 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8701 while (j <
40) loop(calcW(), b ^ c ^ d)
8703 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8705 while (j <
80) loop(calcW(), b ^ c ^ d)
8707 this._a = (a + this._a) |
0
8708 this._b = (b + this._b) |
0
8709 this._c = (c + this._c) |
0
8710 this._d = (d + this._d) |
0
8711 this._e = (e + this._e) |
0
8714 Sha1.prototype._hash = function () {
8715 var H = new Buffer(
20)
8717 H.writeInt32BE(this._a |
0,
0)
8718 H.writeInt32BE(this._b |
0,
4)
8719 H.writeInt32BE(this._c |
0,
8)
8720 H.writeInt32BE(this._d |
0,
12)
8721 H.writeInt32BE(this._e |
0,
16)
8726 module.exports = Sha1
8728 }).call(this,require("buffer").Buffer)
8729 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8732 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8734 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8735 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8739 var inherits = require('inherits')
8740 var Sha256 = require('./sha256')
8741 var Hash = require('./hash')
8743 var W = new Array(
64)
8745 function Sha224 () {
8748 this._w = W // new Array(
64)
8750 Hash.call(this,
64,
56)
8753 inherits(Sha224, Sha256)
8755 Sha224.prototype.init = function () {
8756 this._a =
0xc1059ed8 |
0
8757 this._b =
0x367cd507 |
0
8758 this._c =
0x3070dd17 |
0
8759 this._d =
0xf70e5939 |
0
8760 this._e =
0xffc00b31 |
0
8761 this._f =
0x68581511 |
0
8762 this._g =
0x64f98fa7 |
0
8763 this._h =
0xbefa4fa4 |
0
8768 Sha224.prototype._hash = function () {
8769 var H = new Buffer(
28)
8771 H.writeInt32BE(this._a,
0)
8772 H.writeInt32BE(this._b,
4)
8773 H.writeInt32BE(this._c,
8)
8774 H.writeInt32BE(this._d,
12)
8775 H.writeInt32BE(this._e,
16)
8776 H.writeInt32BE(this._f,
20)
8777 H.writeInt32BE(this._g,
24)
8782 module.exports = Sha224
8784 }).call(this,require("buffer").Buffer)
8785 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8788 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8790 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8791 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8795 var inherits = require('inherits')
8796 var Hash = require('./hash')
8799 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8800 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8801 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8802 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8803 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8804 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8805 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8806 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8807 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8808 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8809 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8810 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8811 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8812 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8813 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8814 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8817 var W = new Array(
64)
8819 function Sha256 () {
8822 this._w = W // new Array(
64)
8824 Hash.call(this,
64,
56)
8827 inherits(Sha256, Hash)
8829 Sha256.prototype.init = function () {
8830 this._a =
0x6a09e667 |
0
8831 this._b =
0xbb67ae85 |
0
8832 this._c =
0x3c6ef372 |
0
8833 this._d =
0xa54ff53a |
0
8834 this._e =
0x510e527f |
0
8835 this._f =
0x9b05688c |
0
8836 this._g =
0x1f83d9ab |
0
8837 this._h =
0x5be0cd19 |
0
8843 return (X
>>> n) | (X << (
32 - n))
8850 function Ch (x, y, z) {
8851 return ((x & y) ^ ((~x) & z))
8854 function Maj (x, y, z) {
8855 return ((x & y) ^ (x & z) ^ (y & z))
8858 function Sigma0256 (x) {
8859 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8862 function Sigma1256 (x) {
8863 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8866 function Gamma0256 (x) {
8867 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8870 function Gamma1256 (x) {
8871 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8874 Sha256.prototype._update = function (M) {
8888 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8892 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8893 var T2 = Sigma0256(a) + Maj(a, b, c)
8907 while (j <
16) loop(M.readInt32BE(j *
4))
8908 while (j <
64) loop(calcW())
8910 this._a = (a + this._a) |
0
8911 this._b = (b + this._b) |
0
8912 this._c = (c + this._c) |
0
8913 this._d = (d + this._d) |
0
8914 this._e = (e + this._e) |
0
8915 this._f = (f + this._f) |
0
8916 this._g = (g + this._g) |
0
8917 this._h = (h + this._h) |
0
8920 Sha256.prototype._hash = function () {
8921 var H = new Buffer(
32)
8923 H.writeInt32BE(this._a,
0)
8924 H.writeInt32BE(this._b,
4)
8925 H.writeInt32BE(this._c,
8)
8926 H.writeInt32BE(this._d,
12)
8927 H.writeInt32BE(this._e,
16)
8928 H.writeInt32BE(this._f,
20)
8929 H.writeInt32BE(this._g,
24)
8930 H.writeInt32BE(this._h,
28)
8935 module.exports = Sha256
8937 }).call(this,require("buffer").Buffer)
8938 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8940 var inherits = require('inherits')
8941 var SHA512 = require('./sha512')
8942 var Hash = require('./hash')
8944 var W = new Array(
160)
8946 function Sha384 () {
8950 Hash.call(this,
128,
112)
8953 inherits(Sha384, SHA512)
8955 Sha384.prototype.init = function () {
8956 this._a =
0xcbbb9d5d |
0
8957 this._b =
0x629a292a |
0
8958 this._c =
0x9159015a |
0
8959 this._d =
0x152fecd8 |
0
8960 this._e =
0x67332667 |
0
8961 this._f =
0x8eb44a87 |
0
8962 this._g =
0xdb0c2e0d |
0
8963 this._h =
0x47b5481d |
0
8965 this._al =
0xc1059ed8 |
0
8966 this._bl =
0x367cd507 |
0
8967 this._cl =
0x3070dd17 |
0
8968 this._dl =
0xf70e5939 |
0
8969 this._el =
0xffc00b31 |
0
8970 this._fl =
0x68581511 |
0
8971 this._gl =
0x64f98fa7 |
0
8972 this._hl =
0xbefa4fa4 |
0
8977 Sha384.prototype._hash = function () {
8978 var H = new Buffer(
48)
8980 function writeInt64BE (h, l, offset) {
8981 H.writeInt32BE(h, offset)
8982 H.writeInt32BE(l, offset +
4)
8985 writeInt64BE(this._a, this._al,
0)
8986 writeInt64BE(this._b, this._bl,
8)
8987 writeInt64BE(this._c, this._cl,
16)
8988 writeInt64BE(this._d, this._dl,
24)
8989 writeInt64BE(this._e, this._el,
32)
8990 writeInt64BE(this._f, this._fl,
40)
8995 module.exports = Sha384
8997 }).call(this,require("buffer").Buffer)
8998 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
9000 var inherits = require('inherits')
9001 var Hash = require('./hash')
9004 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
9005 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
9006 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
9007 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
9008 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
9009 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
9010 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
9011 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
9012 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
9013 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
9014 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
9015 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
9016 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
9017 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
9018 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
9019 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
9020 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
9021 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
9022 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
9023 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
9024 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
9025 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
9026 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
9027 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
9028 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
9029 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
9030 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
9031 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
9032 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
9033 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9034 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9035 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9036 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9037 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9038 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9039 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9040 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9041 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9042 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9043 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9046 var W = new Array(
160)
9048 function Sha512 () {
9052 Hash.call(this,
128,
112)
9055 inherits(Sha512, Hash)
9057 Sha512.prototype.init = function () {
9058 this._a =
0x6a09e667 |
0
9059 this._b =
0xbb67ae85 |
0
9060 this._c =
0x3c6ef372 |
0
9061 this._d =
0xa54ff53a |
0
9062 this._e =
0x510e527f |
0
9063 this._f =
0x9b05688c |
0
9064 this._g =
0x1f83d9ab |
0
9065 this._h =
0x5be0cd19 |
0
9067 this._al =
0xf3bcc908 |
0
9068 this._bl =
0x84caa73b |
0
9069 this._cl =
0xfe94f82b |
0
9070 this._dl =
0x5f1d36f1 |
0
9071 this._el =
0xade682d1 |
0
9072 this._fl =
0x2b3e6c1f |
0
9073 this._gl =
0xfb41bd6b |
0
9074 this._hl =
0x137e2179 |
0
9079 function S (X, Xl, n) {
9080 return (X
>>> n) | (Xl << (
32 - n))
9083 function Ch (x, y, z) {
9084 return ((x & y) ^ ((~x) & z))
9087 function Maj (x, y, z) {
9088 return ((x & y) ^ (x & z) ^ (y & z))
9091 Sha512.prototype._update = function (M) {
9103 var al = this._al |
0
9104 var bl = this._bl |
0
9105 var cl = this._cl |
0
9106 var dl = this._dl |
0
9107 var el = this._el |
0
9108 var fl = this._fl |
0
9109 var gl = this._gl |
0
9110 var hl = this._hl |
0
9115 var x = W[j -
15 *
2]
9116 var xl = W[j -
15 *
2 +
1]
9117 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9118 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9121 xl = W[j -
2 *
2 +
1]
9122 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9123 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9125 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9126 var Wi7 = W[j -
7 *
2]
9127 var Wi7l = W[j -
7 *
2 +
1]
9129 var Wi16 = W[j -
16 *
2]
9130 var Wi16l = W[j -
16 *
2 +
1]
9132 Wil = gamma0l + Wi7l
9133 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9135 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9137 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9144 var maj = Maj(a, b, c)
9145 var majl = Maj(al, bl, cl)
9147 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9148 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9149 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9150 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9152 // t1 = h + sigma1 + ch + K[i] + W[i]
9156 var ch = Ch(e, f, g)
9157 var chl = Ch(el, fl, gl)
9159 var t1l = hl + sigma1l
9160 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9162 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9164 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9166 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9168 // t2 = sigma0 + maj
9169 var t2l = sigma0l + majl
9170 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9179 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9186 al = (t1l + t2l) |
0
9187 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9194 Wi = M.readInt32BE(j *
4)
9195 Wil = M.readInt32BE(j *
4 +
4)
9205 this._al = (this._al + al) |
0
9206 this._bl = (this._bl + bl) |
0
9207 this._cl = (this._cl + cl) |
0
9208 this._dl = (this._dl + dl) |
0
9209 this._el = (this._el + el) |
0
9210 this._fl = (this._fl + fl) |
0
9211 this._gl = (this._gl + gl) |
0
9212 this._hl = (this._hl + hl) |
0
9214 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9215 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9216 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9217 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9218 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9219 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9220 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9221 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9224 Sha512.prototype._hash = function () {
9225 var H = new Buffer(
64)
9227 function writeInt64BE (h, l, offset) {
9228 H.writeInt32BE(h, offset)
9229 H.writeInt32BE(l, offset +
4)
9232 writeInt64BE(this._a, this._al,
0)
9233 writeInt64BE(this._b, this._bl,
8)
9234 writeInt64BE(this._c, this._cl,
16)
9235 writeInt64BE(this._d, this._dl,
24)
9236 writeInt64BE(this._e, this._el,
32)
9237 writeInt64BE(this._f, this._fl,
40)
9238 writeInt64BE(this._g, this._gl,
48)
9239 writeInt64BE(this._h, this._hl,
56)
9244 module.exports = Sha512
9246 }).call(this,require(
"buffer").Buffer)
9247 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9250 var createHash = require('create-hash/browser');
9251 var inherits = require('inherits')
9253 var Transform = require('stream').Transform
9255 var ZEROS = new Buffer(
128)
9258 function Hmac(alg, key) {
9259 Transform.call(this)
9261 if (typeof key === 'string') {
9262 key = new Buffer(key)
9265 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9270 if (key.length
> blocksize) {
9271 key = createHash(alg).update(key).digest()
9273 } else if (key.length < blocksize) {
9274 key = Buffer.concat([key, ZEROS], blocksize)
9277 var ipad = this._ipad = new Buffer(blocksize)
9278 var opad = this._opad = new Buffer(blocksize)
9280 for (var i =
0; i < blocksize; i++) {
9281 ipad[i] = key[i] ^
0x36
9282 opad[i] = key[i] ^
0x5C
9285 this._hash = createHash(alg).update(ipad)
9288 inherits(Hmac, Transform)
9290 Hmac.prototype.update = function (data, enc) {
9291 this._hash.update(data, enc)
9296 Hmac.prototype._transform = function (data, _, next) {
9297 this._hash.update(data)
9302 Hmac.prototype._flush = function (next) {
9303 this.push(this.digest())
9308 Hmac.prototype.digest = function (enc) {
9309 var h = this._hash.digest()
9311 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9314 module.exports = function createHmac(alg, key) {
9315 return new Hmac(alg, key)
9318 }).call(this,require("buffer").Buffer)
9319 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9320 arguments[
4][
12][
0].apply(exports,arguments)
9321 },{"dup":
12}],
47:[function(require,module,exports){
9322 var assert = require('assert')
9323 var BigInteger = require('bigi')
9325 var Point = require('./point')
9327 function Curve(p, a, b, Gx, Gy, n, h) {
9331 this.G = Point.fromAffine(this, Gx, Gy)
9335 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9338 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9341 Curve.prototype.pointFromX = function(isOdd, x) {
9342 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9343 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9346 if (beta.isEven() ^ !isOdd) {
9347 y = this.p.subtract(y) // -y % p
9350 return Point.fromAffine(this, x, y)
9353 Curve.prototype.isInfinity = function(Q) {
9354 if (Q === this.infinity) return true
9356 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9359 Curve.prototype.isOnCurve = function(Q) {
9360 if (this.isInfinity(Q)) return true
9368 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9369 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9370 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9372 // and check that y^
2 = x^
3 + ax + b (mod p)
9373 var lhs = y.square().mod(p)
9374 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9375 return lhs.equals(rhs)
9379 * Validate an elliptic curve point.
9381 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9383 Curve.prototype.validate = function(Q) {
9385 assert(!this.isInfinity(Q), 'Point is at infinity')
9386 assert(this.isOnCurve(Q), 'Point is not on the curve')
9388 // Check nQ = O (where Q is a scalar multiple of G)
9389 var nQ = Q.multiply(this.n)
9390 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9395 module.exports = Curve
9397 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9400 "p": "fffffffdffffffffffffffffffffffff",
9401 "a": "fffffffdfffffffffffffffffffffffc",
9402 "b": "e87579c11079f43dd824993c2cee5ed3",
9403 "n": "fffffffe0000000075a30d1b9038a115",
9405 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9406 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9409 "p": "fffffffffffffffffffffffffffffffeffffac73",
9412 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9414 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9415 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9418 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9419 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9420 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9421 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9423 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9424 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9427 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9430 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9432 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9433 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9436 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9437 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9438 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9439 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9441 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9442 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9445 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9448 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9450 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9451 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9454 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9455 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9456 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9457 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9459 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9460 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9464 },{}],
49:[function(require,module,exports){
9465 var Point = require('./point')
9466 var Curve = require('./curve')
9468 var getCurveByName = require('./names')
9473 getCurveByName: getCurveByName
9476 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9477 var BigInteger = require('bigi')
9479 var curves = require('./curves')
9480 var Curve = require('./curve')
9482 function getCurveByName(name) {
9483 var curve = curves[name]
9484 if (!curve) return null
9486 var p = new BigInteger(curve.p,
16)
9487 var a = new BigInteger(curve.a,
16)
9488 var b = new BigInteger(curve.b,
16)
9489 var n = new BigInteger(curve.n,
16)
9490 var h = new BigInteger(curve.h,
16)
9491 var Gx = new BigInteger(curve.Gx,
16)
9492 var Gy = new BigInteger(curve.Gy,
16)
9494 return new Curve(p, a, b, Gx, Gy, n, h)
9497 module.exports = getCurveByName
9499 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9501 var assert = require('assert')
9502 var BigInteger = require('bigi')
9504 var THREE = BigInteger.valueOf(
3)
9506 function Point(curve, x, y, z) {
9507 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9515 this.compressed = true
9518 Object.defineProperty(Point.prototype, 'zInv', {
9520 if (this._zInv === null) {
9521 this._zInv = this.z.modInverse(this.curve.p)
9528 Object.defineProperty(Point.prototype, 'affineX', {
9530 return this.x.multiply(this.zInv).mod(this.curve.p)
9534 Object.defineProperty(Point.prototype, 'affineY', {
9536 return this.y.multiply(this.zInv).mod(this.curve.p)
9540 Point.fromAffine = function(curve, x, y) {
9541 return new Point(curve, x, y, BigInteger.ONE)
9544 Point.prototype.equals = function(other) {
9545 if (other === this) return true
9546 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9547 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9549 // u = Y2 * Z1 - Y1 * Z2
9550 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9552 if (u.signum() !==
0) return false
9554 // v = X2 * Z1 - X1 * Z2
9555 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9557 return v.signum() ===
0
9560 Point.prototype.negate = function() {
9561 var y = this.curve.p.subtract(this.y)
9563 return new Point(this.curve, this.x, y, this.z)
9566 Point.prototype.add = function(b) {
9567 if (this.curve.isInfinity(this)) return b
9568 if (this.curve.isInfinity(b)) return this
9575 // u = Y2 * Z1 - Y1 * Z2
9576 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9577 // v = X2 * Z1 - X1 * Z2
9578 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9580 if (v.signum() ===
0) {
9581 if (u.signum() ===
0) {
9582 return this.twice() // this == b, so double
9585 return this.curve.infinity // this = -b, so infinity
9589 var v3 = v2.multiply(v)
9590 var x1v2 = x1.multiply(v2)
9591 var zu2 = u.square().multiply(this.z)
9593 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9594 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9595 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9596 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)
9597 // z3 = v^
3 * z1 * z2
9598 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9600 return new Point(this.curve, x3, y3, z3)
9603 Point.prototype.twice = function() {
9604 if (this.curve.isInfinity(this)) return this
9605 if (this.y.signum() ===
0) return this.curve.infinity
9610 var y1z1 = y1.multiply(this.z)
9611 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9612 var a = this.curve.a
9614 // w =
3 * x1^
2 + a * z1^
2
9615 var w = x1.square().multiply(THREE)
9617 if (a.signum() !==
0) {
9618 w = w.add(this.z.square().multiply(a))
9621 w = w.mod(this.curve.p)
9622 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9623 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9624 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9625 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9626 // z3 =
8 * (y1 * z1)^
3
9627 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9629 return new Point(this.curve, x3, y3, z3)
9632 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9633 // TODO: modularize the multiplication algorithm
9634 Point.prototype.multiply = function(k) {
9635 if (this.curve.isInfinity(this)) return this
9636 if (k.signum() ===
0) return this.curve.infinity
9639 var h = e.multiply(THREE)
9641 var neg = this.negate()
9644 for (var i = h.bitLength() -
2; i
> 0; --i) {
9647 var hBit = h.testBit(i)
9648 var eBit = e.testBit(i)
9651 R = R.add(hBit ? this : neg)
9658 // Compute this*j + x*k (simultaneous multiplication)
9659 Point.prototype.multiplyTwo = function(j, x, k) {
9662 if (j.bitLength()
> k.bitLength())
9663 i = j.bitLength() -
1
9665 i = k.bitLength() -
1
9667 var R = this.curve.infinity
9668 var both = this.add(x)
9673 var jBit = j.testBit(i)
9674 var kBit = k.testBit(i)
9695 Point.prototype.getEncoded = function(compressed) {
9696 if (compressed == undefined) compressed = this.compressed
9697 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9699 var x = this.affineX
9700 var y = this.affineY
9704 // Determine size of q in bytes
9705 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9709 buffer = new Buffer(
1 + byteLength)
9710 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9714 buffer = new Buffer(
1 + byteLength + byteLength)
9715 buffer.writeUInt8(
0x04,
0)
9717 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9720 x.toBuffer(byteLength).copy(buffer,
1)
9725 Point.decodeFrom = function(curve, buffer) {
9726 var type = buffer.readUInt8(
0)
9727 var compressed = (type !==
4)
9729 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9730 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9734 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9735 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9737 var isOdd = (type ===
0x03)
9738 Q = curve.pointFromX(isOdd, x)
9741 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9743 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9744 Q = Point.fromAffine(curve, x, y)
9747 Q.compressed = compressed
9751 Point.prototype.toString = function () {
9752 if (this.curve.isInfinity(this)) return '(INFINITY)'
9754 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9757 module.exports = Point
9759 }).call(this,require("buffer").Buffer)
9760 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9761 (function (process,global,Buffer){
9764 var crypto = global.crypto || global.msCrypto
9765 if(crypto && crypto.getRandomValues) {
9766 module.exports = randomBytes;
9768 module.exports = oldBrowser;
9770 function randomBytes(size, cb) {
9771 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9772 /* This will not work in older browsers.
9773 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9776 crypto.getRandomValues(bytes);
9777 if (typeof cb === 'function') {
9778 return process.nextTick(function () {
9784 function oldBrowser() {
9786 'secure random number generation not supported by this browser\n'+
9787 'use chrome, FireFox or Internet Explorer
11'
9791 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9792 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9796 function getFunctionName(fn) {
9797 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9800 function getTypeTypeName(type) {
9801 if (nativeTypes.Function(type)) {
9802 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9804 if (nativeTypes.Object(type)) return JSON.stringify(type);
9809 function getValueTypeName(value) {
9810 if (nativeTypes.Null(value)) return '';
9812 return getFunctionName(value.constructor);
9815 function tfErrorString(type, value) {
9816 var typeTypeName = getTypeTypeName(type);
9817 var valueTypeName = getValueTypeName(value);
9819 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9822 function tfPropertyErrorString(type, name, value) {
9823 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9827 Array: (function (_Array) {
9828 function Array(_x) {
9829 return _Array.apply(this, arguments);
9832 Array.toString = function () {
9833 return _Array.toString();
9837 })(function (value) {
9838 return value !== null && value !== undefined && value.constructor === Array;
9840 Boolean: function Boolean(value) {
9841 return typeof value === 'boolean';
9843 Buffer: (function (_Buffer) {
9844 function Buffer(_x2) {
9845 return _Buffer.apply(this, arguments);
9848 Buffer.toString = function () {
9849 return _Buffer.toString();
9853 })(function (value) {
9854 return Buffer.isBuffer(value);
9856 Function: function Function(value) {
9857 return typeof value === 'function';
9859 Null: function Null(value) {
9860 return value === undefined || value === null;
9862 Number: function Number(value) {
9863 return typeof value === 'number';
9865 Object: function Object(value) {
9866 return typeof value === 'object';
9868 String: function String(value) {
9869 return typeof value === 'string';
9876 function tJSON(type) {
9877 return type && type.toJSON ? type.toJSON() : type;
9880 function sJSON(type) {
9881 var json = tJSON(type);
9882 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9886 arrayOf: function arrayOf(type) {
9887 function arrayOf(value, strict) {
9889 return nativeTypes.Array(value) && value.every(function (x) {
9890 return typeforce(type, x, strict);
9896 arrayOf.toJSON = function () {
9897 return [tJSON(type)];
9903 maybe: function maybe(type) {
9904 function maybe(value, strict) {
9905 return nativeTypes.Null(value) || typeforce(type, value, strict);
9907 maybe.toJSON = function () {
9908 return '?' + sJSON(type);
9914 object: function object(type) {
9915 function object(value, strict) {
9916 typeforce(nativeTypes.Object, value, strict);
9918 var propertyName, propertyType, propertyValue;
9921 for (propertyName in type) {
9922 propertyType = type[propertyName];
9923 propertyValue = value[propertyName];
9925 typeforce(propertyType, propertyValue, strict);
9928 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9932 for (propertyName in value) {
9933 if (type[propertyName]) continue;
9935 throw new TypeError('Unexpected property "' + propertyName + '"');
9941 object.toJSON = function () {
9948 oneOf: function oneOf() {
9949 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9950 types[_key] = arguments[_key];
9953 function oneOf(value, strict) {
9954 return types.some(function (type) {
9956 return typeforce(type, value, strict);
9962 oneOf.toJSON = function () {
9963 return types.map(sJSON).join('|');
9969 quacksLike: function quacksLike(type) {
9970 function quacksLike(value, strict) {
9971 return type === getValueTypeName(value);
9973 quacksLike.toJSON = function () {
9980 tuple: function tuple() {
9981 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9982 types[_key2] = arguments[_key2];
9985 function tuple(value, strict) {
9986 return types.every(function (type, i) {
9987 return typeforce(type, value[i], strict);
9990 tuple.toJSON = function () {
9991 return '(' + types.map(sJSON).join(', ') + ')';
9997 value: function value(expected) {
9998 function value(actual) {
9999 return actual === expected;
10001 value.toJSON = function () {
10009 function compile(type) {
10010 if (nativeTypes.String(type)) {
10011 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
10013 return nativeTypes[type] || otherTypes.quacksLike(type);
10014 } else if (type && nativeTypes.Object(type)) {
10015 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
10019 for (var propertyName in type) {
10020 compiled[propertyName] = compile(type[propertyName]);
10023 return otherTypes.object(compiled);
10024 } else if (nativeTypes.Function(type)) {
10028 return otherTypes.value(type);
10031 function typeforce(_x3, _x4, _x5) {
10034 _function: while (_again) {
10040 if (nativeTypes.Function(type)) {
10041 if (type(value, strict)) return true;
10043 throw new TypeError(tfErrorString(type, value));
10047 _x3 = compile(type);
10051 continue _function;
10055 // assign all types to typeforce function
10057 Object.keys(nativeTypes).forEach(function (typeName) {
10058 var nativeType = nativeTypes[typeName];
10059 nativeType.toJSON = function () {
10063 typeforce[typeName] = nativeType;
10066 for (typeName in otherTypes) {
10067 typeforce[typeName] = otherTypes[typeName];
10070 module.exports = typeforce;
10071 module.exports.compile = compile;
10072 }).call(this,require("buffer").Buffer)
10073 },{"buffer":
7}],
54:[function(require,module,exports){
10074 (function (Buffer){
10075 var assert = require('assert')
10076 var base58check = require('bs58check')
10077 var typeForce = require('typeforce')
10078 var networks = require('./networks')
10079 var scripts = require('./scripts')
10081 function findScriptTypeByVersion (version) {
10082 for (var networkName in networks) {
10083 var network = networks[networkName]
10085 if (version === network.pubKeyHash) return 'pubkeyhash'
10086 if (version === network.scriptHash) return 'scripthash'
10090 function Address (hash, version) {
10091 typeForce('Buffer', hash)
10093 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10094 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10097 this.version = version
10100 Address.fromBase58Check = function (string) {
10101 var payload = base58check.decode(string)
10102 var version = payload.readUInt8(
0)
10103 var hash = payload.slice(
1)
10105 return new Address(hash, version)
10108 Address.fromOutputScript = function (script, network) {
10109 network = network || networks.bitcoin
10111 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10112 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10114 assert(false, script.toASM() + ' has no matching Address')
10117 Address.prototype.toBase58Check = function () {
10118 var payload = new Buffer(
21)
10119 payload.writeUInt8(this.version,
0)
10120 this.hash.copy(payload,
1)
10122 return base58check.encode(payload)
10125 Address.prototype.toOutputScript = function () {
10126 var scriptType = findScriptTypeByVersion(this.version)
10128 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10129 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10131 assert(false, this.toString() + ' has no matching Script')
10134 Address.prototype.toString = Address.prototype.toBase58Check
10136 module.exports = Address
10138 }).call(this,require("buffer").Buffer)
10139 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10140 var bs58check = require('bs58check')
10142 function decode () {
10143 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10145 return bs58check.decode.apply(undefined, arguments)
10148 function encode () {
10149 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10151 return bs58check.encode.apply(undefined, arguments)
10159 },{"bs58check":
31}],
56:[function(require,module,exports){
10160 (function (Buffer){
10161 var assert = require('assert')
10162 var bufferutils = require('./bufferutils')
10163 var crypto = require('./crypto')
10165 var Transaction = require('./transaction')
10167 function Block () {
10169 this.prevHash = null
10170 this.merkleRoot = null
10176 Block.fromBuffer = function (buffer) {
10177 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10180 function readSlice (n) {
10182 return buffer.slice(offset - n, offset)
10185 function readUInt32 () {
10186 var i = buffer.readUInt32LE(offset)
10191 var block = new Block()
10192 block.version = readUInt32()
10193 block.prevHash = readSlice(
32)
10194 block.merkleRoot = readSlice(
32)
10195 block.timestamp = readUInt32()
10196 block.bits = readUInt32()
10197 block.nonce = readUInt32()
10199 if (buffer.length ===
80) return block
10201 function readVarInt () {
10202 var vi = bufferutils.readVarInt(buffer, offset)
10207 // FIXME: poor performance
10208 function readTransaction () {
10209 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10211 offset += tx.toBuffer().length
10215 var nTransactions = readVarInt()
10216 block.transactions = []
10218 for (var i =
0; i < nTransactions; ++i) {
10219 var tx = readTransaction()
10220 block.transactions.push(tx)
10226 Block.fromHex = function (hex) {
10227 return Block.fromBuffer(new Buffer(hex, 'hex'))
10230 Block.prototype.getHash = function () {
10231 return crypto.hash256(this.toBuffer(true))
10234 Block.prototype.getId = function () {
10235 return bufferutils.reverse(this.getHash()).toString('hex')
10238 Block.prototype.getUTCDate = function () {
10239 var date = new Date(
0) // epoch
10240 date.setUTCSeconds(this.timestamp)
10245 Block.prototype.toBuffer = function (headersOnly) {
10246 var buffer = new Buffer(
80)
10249 function writeSlice (slice) {
10250 slice.copy(buffer, offset)
10251 offset += slice.length
10254 function writeUInt32 (i) {
10255 buffer.writeUInt32LE(i, offset)
10259 writeUInt32(this.version)
10260 writeSlice(this.prevHash)
10261 writeSlice(this.merkleRoot)
10262 writeUInt32(this.timestamp)
10263 writeUInt32(this.bits)
10264 writeUInt32(this.nonce)
10266 if (headersOnly || !this.transactions) return buffer
10268 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10269 var txBuffers = this.transactions.map(function (tx) {
10270 return tx.toBuffer()
10273 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10276 Block.prototype.toHex = function (headersOnly) {
10277 return this.toBuffer(headersOnly).toString('hex')
10280 module.exports = Block
10282 }).call(this,require("buffer").Buffer)
10283 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10284 (function (Buffer){
10285 var assert = require('assert')
10286 var opcodes = require('./opcodes')
10288 // https://github.com/feross/buffer/blob/master/index.js#L1127
10289 function verifuint (value, max) {
10290 assert(typeof value === 'number', 'cannot write a non-number as a number')
10291 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10292 assert(value <= max, 'value is larger than maximum value for type')
10293 assert(Math.floor(value) === value, 'value has a fractional component')
10296 function pushDataSize (i) {
10297 return i < opcodes.OP_PUSHDATA1 ?
1
10303 function readPushDataInt (buffer, offset) {
10304 var opcode = buffer.readUInt8(offset)
10308 if (opcode < opcodes.OP_PUSHDATA1) {
10313 } else if (opcode === opcodes.OP_PUSHDATA1) {
10314 if (offset +
2 > buffer.length) return null
10315 number = buffer.readUInt8(offset +
1)
10319 } else if (opcode === opcodes.OP_PUSHDATA2) {
10320 if (offset +
3 > buffer.length) return null
10321 number = buffer.readUInt16LE(offset +
1)
10326 if (offset +
5 > buffer.length) return null
10327 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10329 number = buffer.readUInt32LE(offset +
1)
10340 function readUInt64LE (buffer, offset) {
10341 var a = buffer.readUInt32LE(offset)
10342 var b = buffer.readUInt32LE(offset +
4)
10345 verifuint(b + a,
0x001fffffffffffff)
10350 function readVarInt (buffer, offset) {
10351 var t = buffer.readUInt8(offset)
10360 } else if (t <
254) {
10361 number = buffer.readUInt16LE(offset +
1)
10365 } else if (t <
255) {
10366 number = buffer.readUInt32LE(offset +
1)
10371 number = readUInt64LE(buffer, offset +
1)
10381 function writePushDataInt (buffer, number, offset) {
10382 var size = pushDataSize(number)
10386 buffer.writeUInt8(number, offset)
10389 } else if (size ===
2) {
10390 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10391 buffer.writeUInt8(number, offset +
1)
10394 } else if (size ===
3) {
10395 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10396 buffer.writeUInt16LE(number, offset +
1)
10400 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10401 buffer.writeUInt32LE(number, offset +
1)
10407 function writeUInt64LE (buffer, value, offset) {
10408 verifuint(value,
0x001fffffffffffff)
10410 buffer.writeInt32LE(value & -
1, offset)
10411 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10414 function varIntSize (i) {
10417 : i <
0x100000000 ?
5
10421 function writeVarInt (buffer, number, offset) {
10422 var size = varIntSize(number)
10426 buffer.writeUInt8(number, offset)
10429 } else if (size ===
3) {
10430 buffer.writeUInt8(
253, offset)
10431 buffer.writeUInt16LE(number, offset +
1)
10434 } else if (size ===
5) {
10435 buffer.writeUInt8(
254, offset)
10436 buffer.writeUInt32LE(number, offset +
1)
10440 buffer.writeUInt8(
255, offset)
10441 writeUInt64LE(buffer, number, offset +
1)
10447 function varIntBuffer (i) {
10448 var size = varIntSize(i)
10449 var buffer = new Buffer(size)
10450 writeVarInt(buffer, i,
0)
10455 function reverse (buffer) {
10456 var buffer2 = new Buffer(buffer)
10457 Array.prototype.reverse.call(buffer2)
10462 pushDataSize: pushDataSize,
10463 readPushDataInt: readPushDataInt,
10464 readUInt64LE: readUInt64LE,
10465 readVarInt: readVarInt,
10467 varIntBuffer: varIntBuffer,
10468 varIntSize: varIntSize,
10469 writePushDataInt: writePushDataInt,
10470 writeUInt64LE: writeUInt64LE,
10471 writeVarInt: writeVarInt
10474 }).call(this,require("buffer").Buffer)
10475 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10476 var createHash = require('create-hash')
10478 function hash160 (buffer) {
10479 return ripemd160(sha256(buffer))
10482 function hash256 (buffer) {
10483 return sha256(sha256(buffer))
10486 function ripemd160 (buffer) {
10487 return createHash('rmd160').update(buffer).digest()
10490 function sha1 (buffer) {
10491 return createHash('sha1').update(buffer).digest()
10494 function sha256 (buffer) {
10495 return createHash('sha256').update(buffer).digest()
10498 // FIXME: Name not consistent with others
10499 var createHmac = require('create-hmac')
10501 function HmacSHA256 (buffer, secret) {
10502 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10503 return createHmac('sha256', secret).update(buffer).digest()
10506 function HmacSHA512 (buffer, secret) {
10507 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10508 return createHmac('sha512', secret).update(buffer).digest()
10512 ripemd160: ripemd160,
10517 HmacSHA256: HmacSHA256,
10518 HmacSHA512: HmacSHA512
10521 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10522 (function (Buffer){
10523 var assert = require('assert')
10524 var createHmac = require('create-hmac')
10525 var typeForce = require('typeforce')
10527 var BigInteger = require('bigi')
10528 var ECSignature = require('./ecsignature')
10530 var ZERO = new Buffer([
0])
10531 var ONE = new Buffer([
1])
10533 // https://tools.ietf.org/html/rfc6979#section-
3.2
10534 function deterministicGenerateK (curve, hash, d, checkSig) {
10535 typeForce('Buffer', hash)
10536 typeForce('BigInteger', d)
10538 // FIXME: remove/uncomment for
2.0.0
10539 // typeForce('Function', checkSig)
10541 if (typeof checkSig !== 'function') {
10542 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10544 checkSig = function (k) {
10547 var e = BigInteger.fromBuffer(hash)
10549 var Q = G.multiply(k)
10551 if (curve.isInfinity(Q))
10554 var r = Q.affineX.mod(n)
10555 if (r.signum() ===
0)
10558 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10559 if (s.signum() ===
0)
10567 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10569 var x = d.toBuffer(
32)
10570 var k = new Buffer(
32)
10571 var v = new Buffer(
32)
10573 // Step A, ignored as hash already provided
10581 k = createHmac('sha256', k)
10589 v = createHmac('sha256', k).update(v).digest()
10592 k = createHmac('sha256', k)
10600 v = createHmac('sha256', k).update(v).digest()
10602 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10604 v = createHmac('sha256', k).update(v).digest()
10606 var T = BigInteger.fromBuffer(v)
10608 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10609 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10610 k = createHmac('sha256', k)
10615 v = createHmac('sha256', k).update(v).digest()
10617 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10619 v = createHmac('sha256', k).update(v).digest()
10620 T = BigInteger.fromBuffer(v)
10626 function sign (curve, hash, d) {
10629 var e = BigInteger.fromBuffer(hash)
10633 deterministicGenerateK(curve, hash, d, function (k) {
10634 var Q = G.multiply(k)
10636 if (curve.isInfinity(Q))
10639 r = Q.affineX.mod(n)
10640 if (r.signum() ===
0)
10643 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10644 if (s.signum() ===
0)
10650 var N_OVER_TWO = n.shiftRight(
1)
10652 // enforce low S values, see bip62: 'low s values in signatures'
10653 if (s.compareTo(N_OVER_TWO)
> 0) {
10657 return new ECSignature(r, s)
10660 function verifyRaw (curve, e, signature, Q) {
10664 var r = signature.r
10665 var s = signature.s
10667 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10668 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10669 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10672 var c = s.modInverse(n)
10674 //
1.4.4 Compute u1 = es^−
1 mod n
10675 // u2 = rs^−
1 mod n
10676 var u1 = e.multiply(c).mod(n)
10677 var u2 = r.multiply(c).mod(n)
10679 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10680 var R = G.multiplyTwo(u1, Q, u2)
10681 var v = R.affineX.mod(n)
10683 //
1.4.5 (cont.) Enforce R is not at infinity
10684 if (curve.isInfinity(R)) return false
10686 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10690 function verify (curve, hash, signature, Q) {
10691 //
1.4.2 H = Hash(M), already done by the user
10693 var e = BigInteger.fromBuffer(hash)
10695 return verifyRaw(curve, e, signature, Q)
10699 * Recover a public key from a signature.
10701 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10702 * Key Recovery Operation".
10704 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10706 function recoverPubKey (curve, e, signature, i) {
10707 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10712 var r = signature.r
10713 var s = signature.s
10715 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10716 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10718 // A set LSB signifies that the y-coordinate is odd
10721 // The more significant bit specifies whether we should use the
10722 // first or second candidate key.
10723 var isSecondKey = i
>> 1
10725 //
1.1 Let x = r + jn
10726 var x = isSecondKey ? r.add(n) : r
10727 var R = curve.pointFromX(isYOdd, x)
10729 //
1.4 Check that nR is at infinity
10730 var nR = R.multiply(n)
10731 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10733 // Compute -e from e
10734 var eNeg = e.negate().mod(n)
10736 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10737 // Q = r^-
1 (sR + -eG)
10738 var rInv = r.modInverse(n)
10740 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10747 * Calculate pubkey extraction parameter.
10749 * When extracting a pubkey from a signature, we have to
10750 * distinguish four different cases. Rather than putting this
10751 * burden on the verifier, Bitcoin includes a
2-bit value with the
10754 * This function simply tries all four cases and returns the value
10755 * that resulted in a successful pubkey recovery.
10757 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10758 for (var i =
0; i <
4; i++) {
10759 var Qprime = recoverPubKey(curve, e, signature, i)
10762 if (Qprime.equals(Q)) {
10767 throw new Error('Unable to find valid recovery factor')
10771 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10772 deterministicGenerateK: deterministicGenerateK,
10773 recoverPubKey: recoverPubKey,
10776 verifyRaw: verifyRaw
10779 }).call(this,require(
"buffer").Buffer)
10780 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10781 (function (Buffer){
10782 var assert = require('assert')
10783 var base58check = require('bs58check')
10784 var ecdsa = require('./ecdsa')
10785 var networks = require('./networks')
10786 var randomBytes = require('randombytes')
10787 var typeForce = require('typeforce')
10789 var BigInteger = require('bigi')
10790 var ECPubKey = require('./ecpubkey')
10792 var ecurve = require('ecurve')
10793 var secp256k1 = ecurve.getCurveByName('secp256k1')
10795 function ECKey (d, compressed) {
10796 assert(d.signum()
> 0, 'Private key must be greater than
0')
10797 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10799 var Q = ECKey.curve.G.multiply(d)
10802 this.pub = new ECPubKey(Q, compressed)
10806 ECKey.curve = secp256k1
10808 // Static constructors
10809 ECKey.fromWIF = function (string) {
10810 var payload = base58check.decode(string)
10811 var compressed = false
10813 // Ignore the version byte
10814 payload = payload.slice(
1)
10816 if (payload.length ===
33) {
10817 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10819 // Truncate the compression flag
10820 payload = payload.slice(
0, -
1)
10824 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10826 var d = BigInteger.fromBuffer(payload)
10827 return new ECKey(d, compressed)
10830 ECKey.makeRandom = function (compressed, rng) {
10831 rng = rng || randomBytes
10833 var buffer = rng(
32)
10834 typeForce('Buffer', buffer)
10835 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10837 var d = BigInteger.fromBuffer(buffer)
10838 d = d.mod(ECKey.curve.n)
10840 return new ECKey(d, compressed)
10843 // Export functions
10844 ECKey.prototype.toWIF = function (network) {
10845 network = network || networks.bitcoin
10847 var bufferLen = this.pub.compressed ?
34 :
33
10848 var buffer = new Buffer(bufferLen)
10850 buffer.writeUInt8(network.wif,
0)
10851 this.d.toBuffer(
32).copy(buffer,
1)
10853 if (this.pub.compressed) {
10854 buffer.writeUInt8(
0x01,
33)
10857 return base58check.encode(buffer)
10861 ECKey.prototype.sign = function (hash) {
10862 return ecdsa.sign(ECKey.curve, hash, this.d)
10865 module.exports = ECKey
10867 }).call(this,require(
"buffer").Buffer)
10868 },{
"./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){
10869 (function (Buffer){
10870 var crypto = require('./crypto')
10871 var ecdsa = require('./ecdsa')
10872 var typeForce = require('typeforce')
10873 var networks = require('./networks')
10875 var Address = require('./address')
10877 var ecurve = require('ecurve')
10878 var secp256k1 = ecurve.getCurveByName('secp256k1')
10880 function ECPubKey (Q, compressed) {
10881 if (compressed === undefined) {
10885 typeForce('Point', Q)
10886 typeForce('Boolean', compressed)
10888 this.compressed = compressed
10893 ECPubKey.curve = secp256k1
10895 // Static constructors
10896 ECPubKey.fromBuffer = function (buffer) {
10897 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10898 return new ECPubKey(Q, Q.compressed)
10901 ECPubKey.fromHex = function (hex) {
10902 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10906 ECPubKey.prototype.getAddress = function (network) {
10907 network = network || networks.bitcoin
10909 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10912 ECPubKey.prototype.verify = function (hash, signature) {
10913 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10916 // Export functions
10917 ECPubKey.prototype.toBuffer = function () {
10918 return this.Q.getEncoded(this.compressed)
10921 ECPubKey.prototype.toHex = function () {
10922 return this.toBuffer().toString('hex')
10925 module.exports = ECPubKey
10927 }).call(this,require(
"buffer").Buffer)
10928 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10929 (function (Buffer){
10930 var assert = require('assert')
10931 var typeForce = require('typeforce')
10933 var BigInteger = require('bigi')
10935 function ECSignature (r, s) {
10936 typeForce('BigInteger', r)
10937 typeForce('BigInteger', s)
10943 ECSignature.parseCompact = function (buffer) {
10944 assert.equal(buffer.length,
65, 'Invalid signature length')
10945 var i = buffer.readUInt8(
0) -
27
10948 assert.equal(i, i &
7, 'Invalid signature parameter')
10949 var compressed = !!(i &
4)
10951 // Recovery param only
10954 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10955 var s = BigInteger.fromBuffer(buffer.slice(
33))
10958 compressed: compressed,
10960 signature: new ECSignature(r, s)
10964 ECSignature.fromDER = function (buffer) {
10965 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10966 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10967 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10969 var rLen = buffer.readUInt8(
3)
10970 assert(rLen
> 0, 'R length is zero')
10972 var offset =
4 + rLen
10973 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10975 var sLen = buffer.readUInt8(offset +
1)
10976 assert(sLen
> 0, 'S length is zero')
10978 var rB = buffer.slice(
4, offset)
10979 var sB = buffer.slice(offset +
2)
10982 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10983 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10986 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10987 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10990 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10991 var r = BigInteger.fromDERInteger(rB)
10992 var s = BigInteger.fromDERInteger(sB)
10994 assert(r.signum()
>=
0, 'R value is negative')
10995 assert(s.signum()
>=
0, 'S value is negative')
10997 return new ECSignature(r, s)
11000 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
11001 ECSignature.parseScriptSignature = function (buffer) {
11002 var hashType = buffer.readUInt8(buffer.length -
1)
11003 var hashTypeMod = hashType & ~
0x80
11005 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11008 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
11013 ECSignature.prototype.toCompact = function (i, compressed) {
11020 var buffer = new Buffer(
65)
11021 buffer.writeUInt8(i,
0)
11023 this.r.toBuffer(
32).copy(buffer,
1)
11024 this.s.toBuffer(
32).copy(buffer,
33)
11029 ECSignature.prototype.toDER = function () {
11030 var rBa = this.r.toDERInteger()
11031 var sBa = this.s.toDERInteger()
11036 sequence.push(
0x02, rBa.length)
11037 sequence = sequence.concat(rBa)
11040 sequence.push(
0x02, sBa.length)
11041 sequence = sequence.concat(sBa)
11044 sequence.unshift(
0x30, sequence.length)
11046 return new Buffer(sequence)
11049 ECSignature.prototype.toScriptSignature = function (hashType) {
11050 var hashTypeMod = hashType & ~
0x80
11051 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11053 var hashTypeBuffer = new Buffer(
1)
11054 hashTypeBuffer.writeUInt8(hashType,
0)
11056 return Buffer.concat([this.toDER(), hashTypeBuffer])
11059 module.exports = ECSignature
11061 }).call(this,require(
"buffer").Buffer)
11062 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11063 (function (Buffer){
11064 var assert = require('assert')
11065 var base58check = require('bs58check')
11066 var bcrypto = require('./crypto')
11067 var createHmac = require('create-hmac')
11068 var typeForce = require('typeforce')
11069 var networks = require('./networks')
11071 var BigInteger = require('bigi')
11072 var ECKey = require('./eckey')
11073 var ECPubKey = require('./ecpubkey')
11075 var ecurve = require('ecurve')
11076 var curve = ecurve.getCurveByName('secp256k1')
11078 function findBIP32NetworkByVersion (version) {
11079 for (var name in networks) {
11080 var network = networks[name]
11082 if (version === network.bip32.private || version === network.bip32.public) {
11087 assert(false, 'Could not find network for ' + version.toString(
16))
11090 function HDNode (K, chainCode, network) {
11091 network = network || networks.bitcoin
11093 typeForce('Buffer', chainCode)
11095 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11096 assert(network.bip32, 'Unknown BIP32 constants for network')
11098 this.chainCode = chainCode
11101 this.parentFingerprint =
0x00000000
11102 this.network = network
11104 if (K instanceof BigInteger) {
11105 this.privKey = new ECKey(K, true)
11106 this.pubKey = this.privKey.pub
11107 } else if (K instanceof ECKey) {
11108 assert(K.pub.compressed, 'ECKey must be compressed')
11110 this.pubKey = K.pub
11111 } else if (K instanceof ECPubKey) {
11112 assert(K.compressed, 'ECPubKey must be compressed')
11115 this.pubKey = new ECPubKey(K, true)
11119 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11120 HDNode.HIGHEST_BIT =
0x80000000
11123 HDNode.fromSeedBuffer = function (seed, network) {
11124 typeForce('Buffer', seed)
11126 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11127 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11129 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11130 var IL = I.slice(
0,
32)
11131 var IR = I.slice(
32)
11133 // In case IL is
0 or
>= n, the master key is invalid
11134 // This is handled by `new ECKey` in the HDNode constructor
11135 var pIL = BigInteger.fromBuffer(IL)
11137 return new HDNode(pIL, IR, network)
11140 HDNode.fromSeedHex = function (hex, network) {
11141 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11144 HDNode.fromBase58 = function (string, network) {
11145 return HDNode.fromBuffer(base58check.decode(string), network, true)
11148 // FIXME: remove in
2.x.y
11149 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11150 if (!__ignoreDeprecation) {
11151 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11154 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11156 //
4 byte: version bytes
11157 var version = buffer.readUInt32BE(
0)
11160 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11164 network = findBIP32NetworkByVersion(version)
11167 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11168 var depth = buffer.readUInt8(
4)
11170 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11171 var parentFingerprint = buffer.readUInt32BE(
5)
11173 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11176 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11177 // This is encoded in MSB order. (
0x00000000 if master key)
11178 var index = buffer.readUInt32BE(
9)
11179 assert(depth
> 0 || index ===
0, 'Invalid index')
11181 //
32 bytes: the chain code
11182 var chainCode = buffer.slice(
13,
45)
11185 //
33 bytes: private key data (
0x00 + k)
11186 if (version === network.bip32.private) {
11187 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11188 data = buffer.slice(
46,
78)
11189 var d = BigInteger.fromBuffer(data)
11190 hd = new HDNode(d, chainCode, network)
11192 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11194 data = buffer.slice(
45,
78)
11195 var Q = ecurve.Point.decodeFrom(curve, data)
11196 assert.equal(Q.compressed, true, 'Invalid public key')
11198 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11199 // If not, the extended public key is invalid.
11202 hd = new HDNode(Q, chainCode, network)
11207 hd.parentFingerprint = parentFingerprint
11212 // FIXME: remove in
2.x.y
11213 HDNode.fromHex = function (hex, network) {
11214 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11217 HDNode.prototype.getIdentifier = function () {
11218 return bcrypto.hash160(this.pubKey.toBuffer())
11221 HDNode.prototype.getFingerprint = function () {
11222 return this.getIdentifier().slice(
0,
4)
11225 HDNode.prototype.getAddress = function () {
11226 return this.pubKey.getAddress(this.network)
11229 HDNode.prototype.neutered = function () {
11230 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11231 neutered.depth = this.depth
11232 neutered.index = this.index
11233 neutered.parentFingerprint = this.parentFingerprint
11238 HDNode.prototype.toBase58 = function (isPrivate) {
11239 return base58check.encode(this.toBuffer(isPrivate, true))
11242 // FIXME: remove in
2.x.y
11243 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11244 if (isPrivate === undefined) {
11245 isPrivate = !!this.privKey
11247 // FIXME: remove in
2.x.y
11249 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11252 if (!__ignoreDeprecation) {
11253 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11257 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11258 var buffer = new Buffer(HDNode.LENGTH)
11260 //
4 bytes: version bytes
11261 buffer.writeUInt32BE(version,
0)
11264 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11265 buffer.writeUInt8(this.depth,
4)
11267 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11268 buffer.writeUInt32BE(this.parentFingerprint,
5)
11270 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11271 // This is encoded in Big endian. (
0x00000000 if master key)
11272 buffer.writeUInt32BE(this.index,
9)
11274 //
32 bytes: the chain code
11275 this.chainCode.copy(buffer,
13)
11277 //
33 bytes: the public key or private key data
11279 // FIXME: remove in
2.x.y
11280 assert(this.privKey, 'Missing private key')
11282 //
0x00 + k for private keys
11283 buffer.writeUInt8(
0,
45)
11284 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11286 // X9.62 encoding for public keys
11287 this.pubKey.toBuffer().copy(buffer,
45)
11293 // FIXME: remove in
2.x.y
11294 HDNode.prototype.toHex = function (isPrivate) {
11295 return this.toBuffer(isPrivate).toString('hex')
11298 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11299 HDNode.prototype.derive = function (index) {
11300 var isHardened = index
>= HDNode.HIGHEST_BIT
11301 var indexBuffer = new Buffer(
4)
11302 indexBuffer.writeUInt32BE(index,
0)
11308 assert(this.privKey, 'Could not derive hardened child key')
11310 // data =
0x00 || ser256(kpar) || ser32(index)
11311 data = Buffer.concat([
11312 this.privKey.d.toBuffer(
33),
11318 // data = serP(point(kpar)) || ser32(index)
11319 // = serP(Kpar) || ser32(index)
11320 data = Buffer.concat([
11321 this.pubKey.toBuffer(),
11326 var I = createHmac('sha512', this.chainCode).update(data).digest()
11327 var IL = I.slice(
0,
32)
11328 var IR = I.slice(
32)
11330 var pIL = BigInteger.fromBuffer(IL)
11332 // In case parse256(IL)
>= n, proceed with the next value for i
11333 if (pIL.compareTo(curve.n)
>=
0) {
11334 return this.derive(index +
1)
11337 // Private parent key -
> private child key
11339 if (this.privKey) {
11340 // ki = parse256(IL) + kpar (mod n)
11341 var ki = pIL.add(this.privKey.d).mod(curve.n)
11343 // In case ki ==
0, proceed with the next value for i
11344 if (ki.signum() ===
0) {
11345 return this.derive(index +
1)
11348 hd = new HDNode(ki, IR, this.network)
11350 // Public parent key -
> public child key
11352 // Ki = point(parse256(IL)) + Kpar
11354 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11356 // In case Ki is the point at infinity, proceed with the next value for i
11357 if (curve.isInfinity(Ki)) {
11358 return this.derive(index +
1)
11361 hd = new HDNode(Ki, IR, this.network)
11364 hd.depth = this.depth +
1
11366 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11371 HDNode.prototype.deriveHardened = function (index) {
11372 // Only derives hardened private keys by default
11373 return this.derive(index + HDNode.HIGHEST_BIT)
11376 HDNode.prototype.toString = HDNode.prototype.toBase58
11378 module.exports = HDNode
11380 }).call(this,require("buffer").Buffer)
11381 },{"./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){
11383 Address: require('./address'),
11384 base58check: require('./base58check'),
11385 Block: require('./block'),
11386 bufferutils: require('./bufferutils'),
11387 crypto: require('./crypto'),
11388 ecdsa: require('./ecdsa'),
11389 ECKey: require('./eckey'),
11390 ECPubKey: require('./ecpubkey'),
11391 ECSignature: require('./ecsignature'),
11392 Message: require('./message'),
11393 opcodes: require('./opcodes'),
11394 HDNode: require('./hdnode'),
11395 Script: require('./script'),
11396 scripts: require('./scripts'),
11397 Transaction: require('./transaction'),
11398 TransactionBuilder: require('./transaction_builder'),
11399 networks: require('./networks'),
11400 Wallet: require('./wallet')
11403 },{"./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){
11404 (function (Buffer){
11405 var bufferutils = require('./bufferutils')
11406 var crypto = require('./crypto')
11407 var ecdsa = require('./ecdsa')
11408 var networks = require('./networks')
11410 var BigInteger = require('bigi')
11411 var ECPubKey = require('./ecpubkey')
11412 var ECSignature = require('./ecsignature')
11414 var ecurve = require('ecurve')
11415 var ecparams = ecurve.getCurveByName('secp256k1')
11417 function magicHash (message, network) {
11418 var magicPrefix = new Buffer(network.magicPrefix)
11419 var messageBuffer = new Buffer(message)
11420 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11422 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11423 return crypto.hash256(buffer)
11426 function sign (privKey, message, network) {
11427 network = network || networks.bitcoin
11429 var hash = magicHash(message, network)
11430 var signature = privKey.sign(hash)
11431 var e = BigInteger.fromBuffer(hash)
11432 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11434 return signature.toCompact(i, privKey.pub.compressed)
11437 // TODO: network could be implied from address
11438 function verify (address, signature, message, network) {
11439 if (!Buffer.isBuffer(signature)) {
11440 signature = new Buffer(signature, 'base64')
11443 network = network || networks.bitcoin
11445 var hash = magicHash(message, network)
11446 var parsed = ECSignature.parseCompact(signature)
11447 var e = BigInteger.fromBuffer(hash)
11448 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11450 var pubKey = new ECPubKey(Q, parsed.compressed)
11451 return pubKey.getAddress(network).toString() === address.toString()
11455 magicHash: magicHash,
11460 }).call(this,require("buffer").Buffer)
11461 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11462 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11463 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11467 magicPrefix: '\x18Bitcoin Signed Message:\n',
11469 public:
0x0488b21e,
11470 private:
0x0488ade4
11475 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11476 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11477 estimateFee: estimateFee('bitcoin')
11480 magicPrefix: '\x18Bitcoin Signed Message:\n',
11482 public:
0x043587cf,
11483 private:
0x04358394
11488 dustThreshold:
546,
11490 estimateFee: estimateFee('testnet')
11493 magicPrefix: '\x19Litecoin Signed Message:\n',
11495 public:
0x019da462,
11496 private:
0x019d9cfe
11501 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11502 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11503 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11504 estimateFee: estimateFee('litecoin')
11507 magicPrefix: '\x19Dogecoin Signed Message:\n',
11509 public:
0x02facafd,
11510 private:
0x02fac398
11515 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11516 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11517 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11518 estimateFee: estimateFee('dogecoin')
11521 magicPrefix: '\x18Viacoin Signed Message:\n',
11523 public:
0x0488b21e,
11524 private:
0x0488ade4
11529 dustThreshold:
560,
11530 dustSoftThreshold:
100000,
11531 feePerKb:
100000, //
11532 estimateFee: estimateFee('viacoin')
11535 magicPrefix: '\x18Viacoin Signed Message:\n',
11537 public:
0x043587cf,
11538 private:
0x04358394
11543 dustThreshold:
560,
11544 dustSoftThreshold:
100000,
11546 estimateFee: estimateFee('viacointestnet')
11549 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11551 public:
0x019da462,
11552 private:
0x019d9cfe
11557 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11558 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11559 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11560 estimateFee: estimateFee('gamerscoin')
11563 magicPrefix: '\x19Jumbucks Signed Message:\n',
11565 public:
0x037a689a,
11566 private:
0x037a6460
11572 dustSoftThreshold:
10000,
11574 estimateFee: estimateFee('jumbucks')
11577 magicPrefix: '\x18Zetacoin Signed Message:\n',
11579 public:
0x0488b21e,
11580 private:
0x0488ade4
11585 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11586 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11587 estimateFee: estimateFee('zetacoin')
11591 function estimateFee (type) {
11592 return function (tx) {
11593 var network = networks[type]
11594 var baseFee = network.feePerKb
11595 var byteSize = tx.toBuffer().length
11597 var fee = baseFee * Math.ceil(byteSize /
1000)
11598 if (network.dustSoftThreshold === undefined) return fee
11600 tx.outs.forEach(function (e) {
11601 if (e.value < network.dustSoftThreshold) {
11610 module.exports = networks
11612 },{}],
67:[function(require,module,exports){
11653 OP_TOALTSTACK:
107,
11654 OP_FROMALTSTACK:
108,
11686 OP_EQUALVERIFY:
136,
11711 OP_NUMEQUALVERIFY:
157,
11712 OP_NUMNOTEQUAL:
158,
11714 OP_GREATERTHAN:
160,
11715 OP_LESSTHANOREQUAL:
161,
11716 OP_GREATERTHANOREQUAL:
162,
11728 OP_CODESEPARATOR:
171,
11730 OP_CHECKSIGVERIFY:
173,
11731 OP_CHECKMULTISIG:
174,
11732 OP_CHECKMULTISIGVERIFY:
175,
11746 // template matching params
11747 OP_PUBKEYHASH:
253,
11749 OP_INVALIDOPCODE:
255
11752 },{}],
68:[function(require,module,exports){
11753 (function (Buffer){
11754 var assert = require('assert')
11755 var bufferutils = require('./bufferutils')
11756 var crypto = require('./crypto')
11757 var typeForce = require('typeforce')
11758 var opcodes = require('./opcodes')
11760 function Script (buffer, chunks) {
11761 typeForce('Buffer', buffer)
11762 typeForce('Array', chunks)
11764 this.buffer = buffer
11765 this.chunks = chunks
11768 Script.fromASM = function (asm) {
11769 var strChunks = asm.split(' ')
11770 var chunks = strChunks.map(function (strChunk) {
11772 if (strChunk in opcodes) {
11773 return opcodes[strChunk]
11777 return new Buffer(strChunk, 'hex')
11781 return Script.fromChunks(chunks)
11784 Script.fromBuffer = function (buffer) {
11788 while (i < buffer.length) {
11789 var opcode = buffer.readUInt8(i)
11792 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11793 var d = bufferutils.readPushDataInt(buffer, i)
11795 // did reading a pushDataInt fail? return non-chunked script
11796 if (d === null) return new Script(buffer, [])
11799 // attempt to read too much data?
11800 if (i + d.number
> buffer.length) return new Script(buffer, [])
11802 var data = buffer.slice(i, i + d.number)
11809 chunks.push(opcode)
11815 return new Script(buffer, chunks)
11818 Script.fromChunks = function (chunks) {
11819 typeForce('Array', chunks)
11821 var bufferSize = chunks.reduce(function (accum, chunk) {
11823 if (Buffer.isBuffer(chunk)) {
11824 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11831 var buffer = new Buffer(bufferSize)
11834 chunks.forEach(function (chunk) {
11836 if (Buffer.isBuffer(chunk)) {
11837 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11839 chunk.copy(buffer, offset)
11840 offset += chunk.length
11844 buffer.writeUInt8(chunk, offset)
11849 assert.equal(offset, buffer.length, 'Could not decode chunks')
11850 return new Script(buffer, chunks)
11853 Script.fromHex = function (hex) {
11854 return Script.fromBuffer(new Buffer(hex, 'hex'))
11857 Script.EMPTY = Script.fromChunks([])
11859 Script.prototype.getHash = function () {
11860 return crypto.hash160(this.buffer)
11863 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11864 Script.prototype.without = function (needle) {
11865 return Script.fromChunks(this.chunks.filter(function (op) {
11866 return op !== needle
11870 var reverseOps = []
11871 for (var op in opcodes) {
11872 var code = opcodes[op]
11873 reverseOps[code] = op
11876 Script.prototype.toASM = function () {
11877 return this.chunks.map(function (chunk) {
11879 if (Buffer.isBuffer(chunk)) {
11880 return chunk.toString('hex')
11884 return reverseOps[chunk]
11889 Script.prototype.toBuffer = function () {
11893 Script.prototype.toHex = function () {
11894 return this.toBuffer().toString('hex')
11897 module.exports = Script
11899 }).call(this,require("buffer").Buffer)
11900 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11901 (function (Buffer){
11902 var assert = require('assert')
11903 var ops = require('./opcodes')
11904 var typeForce = require('typeforce')
11906 var ecurve = require('ecurve')
11907 var curve = ecurve.getCurveByName('secp256k1')
11909 var ECSignature = require('./ecsignature')
11910 var Script = require('./script')
11912 function isCanonicalPubKey (buffer) {
11913 if (!Buffer.isBuffer(buffer)) return false
11916 ecurve.Point.decodeFrom(curve, buffer)
11918 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11927 function isCanonicalSignature (buffer) {
11928 if (!Buffer.isBuffer(buffer)) return false
11931 ECSignature.parseScriptSignature(buffer)
11933 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/))) {
11943 function isPubKeyHashInput (script) {
11944 return script.chunks.length ===
2 &&
11945 isCanonicalSignature(script.chunks[
0]) &&
11946 isCanonicalPubKey(script.chunks[
1])
11949 function isPubKeyHashOutput (script) {
11950 return script.chunks.length ===
5 &&
11951 script.chunks[
0] === ops.OP_DUP &&
11952 script.chunks[
1] === ops.OP_HASH160 &&
11953 Buffer.isBuffer(script.chunks[
2]) &&
11954 script.chunks[
2].length ===
20 &&
11955 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11956 script.chunks[
4] === ops.OP_CHECKSIG
11959 function isPubKeyInput (script) {
11960 return script.chunks.length ===
1 &&
11961 isCanonicalSignature(script.chunks[
0])
11964 function isPubKeyOutput (script) {
11965 return script.chunks.length ===
2 &&
11966 isCanonicalPubKey(script.chunks[
0]) &&
11967 script.chunks[
1] === ops.OP_CHECKSIG
11970 function isScriptHashInput (script, allowIncomplete) {
11971 if (script.chunks.length <
2) return false
11973 var lastChunk = script.chunks[script.chunks.length -
1]
11974 if (!Buffer.isBuffer(lastChunk)) return false
11976 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11977 var redeemScript = Script.fromBuffer(lastChunk)
11979 // is redeemScript a valid script?
11980 if (redeemScript.chunks.length ===
0) return false
11982 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11985 function isScriptHashOutput (script) {
11986 return script.chunks.length ===
3 &&
11987 script.chunks[
0] === ops.OP_HASH160 &&
11988 Buffer.isBuffer(script.chunks[
1]) &&
11989 script.chunks[
1].length ===
20 &&
11990 script.chunks[
2] === ops.OP_EQUAL
11993 // allowIncomplete is to account for combining signatures
11994 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11995 function isMultisigInput (script, allowIncomplete) {
11996 if (script.chunks.length <
2) return false
11997 if (script.chunks[
0] !== ops.OP_0) return false
11999 if (allowIncomplete) {
12000 return script.chunks.slice(
1).every(function (chunk) {
12001 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12005 return script.chunks.slice(
1).every(isCanonicalSignature)
12008 function isMultisigOutput (script) {
12009 if (script.chunks.length <
4) return false
12010 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
12012 var mOp = script.chunks[
0]
12013 if (mOp === ops.OP_0) return false
12014 if (mOp < ops.OP_1) return false
12015 if (mOp
> ops.OP_16) return false
12017 var nOp = script.chunks[script.chunks.length -
2]
12018 if (nOp === ops.OP_0) return false
12019 if (nOp < ops.OP_1) return false
12020 if (nOp
> ops.OP_16) return false
12022 var m = mOp - (ops.OP_1 -
1)
12023 var n = nOp - (ops.OP_1 -
1)
12024 if (n < m) return false
12026 var pubKeys = script.chunks.slice(
1, -
2)
12027 if (n < pubKeys.length) return false
12029 return pubKeys.every(isCanonicalPubKey)
12032 function isNullDataOutput (script) {
12033 return script.chunks[
0] === ops.OP_RETURN
12036 function classifyOutput (script) {
12037 typeForce('Script', script)
12039 if (isPubKeyHashOutput(script)) {
12040 return 'pubkeyhash'
12041 } else if (isScriptHashOutput(script)) {
12042 return 'scripthash'
12043 } else if (isMultisigOutput(script)) {
12045 } else if (isPubKeyOutput(script)) {
12047 } else if (isNullDataOutput(script)) {
12051 return 'nonstandard'
12054 function classifyInput (script, allowIncomplete) {
12055 typeForce('Script', script)
12057 if (isPubKeyHashInput(script)) {
12058 return 'pubkeyhash'
12059 } else if (isMultisigInput(script, allowIncomplete)) {
12061 } else if (isScriptHashInput(script, allowIncomplete)) {
12062 return 'scripthash'
12063 } else if (isPubKeyInput(script)) {
12067 return 'nonstandard'
12070 // Standard Script Templates
12071 // {pubKey} OP_CHECKSIG
12072 function pubKeyOutput (pubKey) {
12073 return Script.fromChunks([
12079 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12080 function pubKeyHashOutput (hash) {
12081 typeForce('Buffer', hash)
12083 return Script.fromChunks([
12087 ops.OP_EQUALVERIFY,
12092 // OP_HASH160 {scriptHash} OP_EQUAL
12093 function scriptHashOutput (hash) {
12094 typeForce('Buffer', hash)
12096 return Script.fromChunks([
12103 // m [pubKeys ...] n OP_CHECKMULTISIG
12104 function multisigOutput (m, pubKeys) {
12105 typeForce(['ECPubKey'], pubKeys)
12107 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12109 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12110 return pubKey.toBuffer()
12112 var n = pubKeys.length
12114 return Script.fromChunks([].concat(
12115 (ops.OP_1 -
1) + m,
12117 (ops.OP_1 -
1) + n,
12118 ops.OP_CHECKMULTISIG
12123 function pubKeyInput (signature) {
12124 typeForce('Buffer', signature)
12126 return Script.fromChunks([signature])
12129 // {signature} {pubKey}
12130 function pubKeyHashInput (signature, pubKey) {
12131 typeForce('Buffer', signature)
12133 return Script.fromChunks([signature, pubKey.toBuffer()])
12136 //
<scriptSig> {serialized scriptPubKey script}
12137 function scriptHashInput (scriptSig, scriptPubKey) {
12138 return Script.fromChunks([].concat(
12140 scriptPubKey.toBuffer()
12144 // OP_0 [signatures ...]
12145 function multisigInput (signatures, scriptPubKey) {
12146 if (scriptPubKey) {
12147 assert(isMultisigOutput(scriptPubKey))
12149 var mOp = scriptPubKey.chunks[
0]
12150 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12151 var m = mOp - (ops.OP_1 -
1)
12152 var n = nOp - (ops.OP_1 -
1)
12154 assert(signatures.length
>= m, 'Not enough signatures provided')
12155 assert(signatures.length <= n, 'Too many signatures provided')
12158 return Script.fromChunks([].concat(ops.OP_0, signatures))
12161 function nullDataOutput (data) {
12162 return Script.fromChunks([ops.OP_RETURN, data])
12166 isCanonicalPubKey: isCanonicalPubKey,
12167 isCanonicalSignature: isCanonicalSignature,
12168 isPubKeyHashInput: isPubKeyHashInput,
12169 isPubKeyHashOutput: isPubKeyHashOutput,
12170 isPubKeyInput: isPubKeyInput,
12171 isPubKeyOutput: isPubKeyOutput,
12172 isScriptHashInput: isScriptHashInput,
12173 isScriptHashOutput: isScriptHashOutput,
12174 isMultisigInput: isMultisigInput,
12175 isMultisigOutput: isMultisigOutput,
12176 isNullDataOutput: isNullDataOutput,
12177 classifyOutput: classifyOutput,
12178 classifyInput: classifyInput,
12179 pubKeyOutput: pubKeyOutput,
12180 pubKeyHashOutput: pubKeyHashOutput,
12181 scriptHashOutput: scriptHashOutput,
12182 multisigOutput: multisigOutput,
12183 pubKeyInput: pubKeyInput,
12184 pubKeyHashInput: pubKeyHashInput,
12185 scriptHashInput: scriptHashInput,
12186 multisigInput: multisigInput,
12187 dataOutput: function (data) {
12188 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12189 return nullDataOutput(data)
12191 nullDataOutput: nullDataOutput
12194 }).call(this,require("buffer").Buffer)
12195 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12196 (function (Buffer){
12197 var assert = require('assert')
12198 var bufferutils = require('./bufferutils')
12199 var crypto = require('./crypto')
12200 var typeForce = require('typeforce')
12201 var opcodes = require('./opcodes')
12202 var scripts = require('./scripts')
12204 var Address = require('./address')
12205 var ECSignature = require('./ecsignature')
12206 var Script = require('./script')
12208 function Transaction () {
12215 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12216 Transaction.SIGHASH_ALL =
0x01
12217 Transaction.SIGHASH_NONE =
0x02
12218 Transaction.SIGHASH_SINGLE =
0x03
12219 Transaction.SIGHASH_ANYONECANPAY =
0x80
12221 Transaction.fromBuffer = function (buffer, __disableAssert) {
12223 function readSlice (n) {
12225 return buffer.slice(offset - n, offset)
12228 function readUInt32 () {
12229 var i = buffer.readUInt32LE(offset)
12234 function readUInt64 () {
12235 var i = bufferutils.readUInt64LE(buffer, offset)
12240 function readVarInt () {
12241 var vi = bufferutils.readVarInt(buffer, offset)
12246 function readScript () {
12247 return Script.fromBuffer(readSlice(readVarInt()))
12250 function readGenerationScript () {
12251 return new Script(readSlice(readVarInt()), [])
12254 var tx = new Transaction()
12255 tx.version = readUInt32()
12257 var vinLen = readVarInt()
12258 for (var i =
0; i < vinLen; ++i) {
12259 var hash = readSlice(
32)
12261 if (Transaction.isCoinbaseHash(hash)) {
12264 index: readUInt32(),
12265 script: readGenerationScript(),
12266 sequence: readUInt32()
12271 index: readUInt32(),
12272 script: readScript(),
12273 sequence: readUInt32()
12278 var voutLen = readVarInt()
12279 for (i =
0; i < voutLen; ++i) {
12281 value: readUInt64(),
12282 script: readScript()
12286 tx.locktime = readUInt32()
12288 if (!__disableAssert) {
12289 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12295 Transaction.fromHex = function (hex) {
12296 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12299 Transaction.isCoinbaseHash = function (buffer) {
12300 return Array.prototype.every.call(buffer, function (x) {
12306 * Create a new txIn.
12308 * Can be called with any of:
12310 * - A transaction and an index
12311 * - A transaction hash and an index
12313 * Note that this method does not sign the created input.
12315 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12316 if (sequence === undefined || sequence === null) {
12317 sequence = Transaction.DEFAULT_SEQUENCE
12320 script = script || Script.EMPTY
12322 if (typeof hash === 'string') {
12323 // TxId hex is big-endian, we need little-endian
12324 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12325 } else if (hash instanceof Transaction) {
12326 hash = hash.getHash()
12329 typeForce('Buffer', hash)
12330 typeForce('Number', index)
12331 typeForce('Number', sequence)
12332 typeForce('Script', script)
12334 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12336 // Add the input and return the input's index
12337 return (this.ins.push({
12346 * Create a new txOut.
12348 * Can be called with:
12350 * - A base58 address string and a value
12351 * - An Address object and a value
12352 * - A scriptPubKey Script and a value
12354 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12355 // Attempt to get a valid address if it's a base58 address string
12356 if (typeof scriptPubKey === 'string') {
12357 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12360 // Attempt to get a valid script if it's an Address object
12361 if (scriptPubKey instanceof Address) {
12362 scriptPubKey = scriptPubKey.toOutputScript()
12365 typeForce('Script', scriptPubKey)
12366 typeForce('Number', value)
12368 // Add the output and return the output's index
12369 return (this.outs.push({
12370 script: scriptPubKey,
12375 Transaction.prototype.clone = function () {
12376 var newTx = new Transaction()
12377 newTx.version = this.version
12378 newTx.locktime = this.locktime
12380 newTx.ins = this.ins.map(function (txIn) {
12384 script: txIn.script,
12385 sequence: txIn.sequence
12389 newTx.outs = this.outs.map(function (txOut) {
12391 script: txOut.script,
12400 * Hash transaction for signing a specific input.
12402 * Bitcoin uses a different hash for each signed transaction input. This
12403 * method copies the transaction, makes the necessary changes based on the
12404 * hashType, serializes and finally hashes the result. This hash can then be
12405 * used to sign the transaction input in question.
12407 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12408 // FIXME: remove in
2.x.y
12409 if (arguments[
0] instanceof Script) {
12410 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12412 // swap the arguments (must be stored in tmp, arguments is special)
12413 var tmp = arguments[
0]
12414 inIndex = arguments[
1]
12415 prevOutScript = tmp
12418 typeForce('Number', inIndex)
12419 typeForce('Script', prevOutScript)
12420 typeForce('Number', hashType)
12422 assert(inIndex
>=
0, 'Invalid vin index')
12423 assert(inIndex < this.ins.length, 'Invalid vin index')
12425 var txTmp = this.clone()
12426 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12428 // Blank out other inputs' signatures
12429 txTmp.ins.forEach(function (txIn) {
12430 txIn.script = Script.EMPTY
12432 txTmp.ins[inIndex].script = hashScript
12434 var hashTypeModifier = hashType &
0x1f
12436 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12437 assert(false, 'SIGHASH_NONE not yet supported')
12438 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12439 assert(false, 'SIGHASH_SINGLE not yet supported')
12442 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12443 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12446 var hashTypeBuffer = new Buffer(
4)
12447 hashTypeBuffer.writeInt32LE(hashType,
0)
12449 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12450 return crypto.hash256(buffer)
12453 Transaction.prototype.getHash = function () {
12454 return crypto.hash256(this.toBuffer())
12457 Transaction.prototype.getId = function () {
12458 // TxHash is little-endian, we need big-endian
12459 return bufferutils.reverse(this.getHash()).toString('hex')
12462 Transaction.prototype.toBuffer = function () {
12463 function scriptSize (script) {
12464 var length = script.buffer.length
12466 return bufferutils.varIntSize(length) + length
12469 var buffer = new Buffer(
12471 bufferutils.varIntSize(this.ins.length) +
12472 bufferutils.varIntSize(this.outs.length) +
12473 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12474 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12478 function writeSlice (slice) {
12479 slice.copy(buffer, offset)
12480 offset += slice.length
12483 function writeUInt32 (i) {
12484 buffer.writeUInt32LE(i, offset)
12488 function writeUInt64 (i) {
12489 bufferutils.writeUInt64LE(buffer, i, offset)
12493 function writeVarInt (i) {
12494 var n = bufferutils.writeVarInt(buffer, i, offset)
12498 writeUInt32(this.version)
12499 writeVarInt(this.ins.length)
12501 this.ins.forEach(function (txIn) {
12502 writeSlice(txIn.hash)
12503 writeUInt32(txIn.index)
12504 writeVarInt(txIn.script.buffer.length)
12505 writeSlice(txIn.script.buffer)
12506 writeUInt32(txIn.sequence)
12509 writeVarInt(this.outs.length)
12510 this.outs.forEach(function (txOut) {
12511 writeUInt64(txOut.value)
12512 writeVarInt(txOut.script.buffer.length)
12513 writeSlice(txOut.script.buffer)
12516 writeUInt32(this.locktime)
12521 Transaction.prototype.toHex = function () {
12522 return this.toBuffer().toString('hex')
12525 Transaction.prototype.setInputScript = function (index, script) {
12526 typeForce('Number', index)
12527 typeForce('Script', script)
12529 this.ins[index].script = script
12532 // FIXME: remove in
2.x.y
12533 Transaction.prototype.sign = function (index, privKey, hashType) {
12534 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12536 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12537 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12539 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12540 this.setInputScript(index, scriptSig)
12543 // FIXME: remove in
2.x.y
12544 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12545 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12547 hashType = hashType || Transaction.SIGHASH_ALL
12549 var hash = this.hashForSignature(index, prevOutScript, hashType)
12550 var signature = privKey.sign(hash)
12552 return signature.toScriptSignature(hashType)
12555 // FIXME: remove in
2.x.y
12556 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12557 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12559 var parsed = ECSignature.parseScriptSignature(buffer)
12560 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12562 return pubKey.verify(hash, parsed.signature)
12565 module.exports = Transaction
12567 }).call(this,require("buffer").Buffer)
12568 },{"./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){
12569 (function (Buffer){
12570 var assert = require('assert')
12571 var ops = require('./opcodes')
12572 var scripts = require('./scripts')
12574 var ECPubKey = require('./ecpubkey')
12575 var ECSignature = require('./ecsignature')
12576 var Script = require('./script')
12577 var Transaction = require('./transaction')
12579 function extractInput (txIn) {
12581 var scriptSig = txIn.script
12583 var prevOutType = scripts.classifyInput(scriptSig, true)
12586 // Re-classify if scriptHash
12587 if (prevOutType === 'scripthash') {
12588 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12589 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12591 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12592 scriptType = scripts.classifyInput(scriptSig, true)
12594 scriptType = prevOutType
12597 // Extract hashType, pubKeys and signatures
12598 var hashType, parsed, pubKeys, signatures
12600 switch (scriptType) {
12601 case 'pubkeyhash': {
12602 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12603 hashType = parsed.hashType
12604 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12605 signatures = [parsed.signature]
12606 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12612 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12613 hashType = parsed.hashType
12614 signatures = [parsed.signature]
12616 if (redeemScript) {
12617 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12624 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12625 if (chunk === ops.OP_0) return chunk
12627 var parsed = ECSignature.parseScriptSignature(chunk)
12628 hashType = parsed.hashType
12630 return parsed.signature
12633 if (redeemScript) {
12634 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12642 hashType: hashType,
12643 prevOutScript: prevOutScript,
12644 prevOutType: prevOutType,
12646 redeemScript: redeemScript,
12647 scriptType: scriptType,
12648 signatures: signatures
12652 function TransactionBuilder () {
12653 this.prevTxMap = {}
12654 this.prevOutScripts = {}
12655 this.prevOutTypes = {}
12658 this.tx = new Transaction()
12661 TransactionBuilder.fromTransaction = function (transaction) {
12662 var txb = new TransactionBuilder()
12664 // Copy other transaction fields
12665 txb.tx.version = transaction.version
12666 txb.tx.locktime = transaction.locktime
12668 // Extract/add inputs
12669 transaction.ins.forEach(function (txIn) {
12670 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12673 // Extract/add outputs
12674 transaction.outs.forEach(function (txOut) {
12675 txb.addOutput(txOut.script, txOut.value)
12678 // Extract/add signatures
12679 txb.inputs = transaction.ins.map(function (txIn) {
12680 // TODO: remove me after testcase added
12681 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12683 // Ignore empty scripts
12684 if (txIn.script.buffer.length ===
0) return {}
12686 return extractInput(txIn)
12692 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12696 if (typeof prevTx === 'string') {
12697 prevOutHash = new Buffer(prevTx, 'hex')
12699 // TxId hex is big-endian, we want little-endian hash
12700 Array.prototype.reverse.call(prevOutHash)
12703 } else if (prevTx instanceof Transaction) {
12704 prevOutHash = prevTx.getHash()
12705 prevOutScript = prevTx.outs[index].script
12709 prevOutHash = prevTx
12713 if (prevOutScript) {
12714 var prevOutType = scripts.classifyOutput(prevOutScript)
12716 // if we can, extract pubKey information
12717 switch (prevOutType) {
12719 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12724 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12729 if (prevOutType !== 'scripthash') {
12730 input.scriptType = prevOutType
12733 input.prevOutScript = prevOutScript
12734 input.prevOutType = prevOutType
12737 assert(this.inputs.every(function (input2) {
12738 if (input2.hashType === undefined) return true
12740 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12741 }), 'No, this would invalidate signatures')
12743 var prevOut = prevOutHash.toString('hex') + ':' + index
12744 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12746 var vin = this.tx.addInput(prevOutHash, index, sequence)
12747 this.inputs[vin] = input
12748 this.prevTxMap[prevOut] = vin
12753 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12754 assert(this.inputs.every(function (input) {
12755 if (input.hashType === undefined) return true
12757 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12758 }), 'No, this would invalidate signatures')
12760 return this.tx.addOutput(scriptPubKey, value)
12763 TransactionBuilder.prototype.build = function () {
12764 return this.__build(false)
12766 TransactionBuilder.prototype.buildIncomplete = function () {
12767 return this.__build(true)
12770 var canSignTypes = {
12771 'pubkeyhash': true,
12776 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12777 if (!allowIncomplete) {
12778 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12779 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12782 var tx = this.tx.clone()
12784 // Create script signatures from signature meta-data
12785 this.inputs.forEach(function (input, index) {
12786 var scriptType = input.scriptType
12789 if (!allowIncomplete) {
12790 assert(!!scriptType, 'Transaction is not complete')
12791 assert(scriptType in canSignTypes, scriptType + ' not supported')
12792 assert(input.signatures, 'Transaction is missing signatures')
12795 if (input.signatures) {
12796 switch (scriptType) {
12797 case 'pubkeyhash': {
12798 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12799 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12804 // Array.prototype.map is sparse-compatible
12805 var msSignatures = input.signatures.map(function (signature) {
12806 return signature && signature.toScriptSignature(input.hashType)
12809 // fill in blanks with OP_0
12810 if (allowIncomplete) {
12811 for (var i =
0; i < msSignatures.length; ++i) {
12812 if (msSignatures[i]) continue
12814 msSignatures[i] = ops.OP_0
12817 // Array.prototype.filter returns non-sparse array
12818 msSignatures = msSignatures.filter(function (x) { return x })
12821 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12822 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12827 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12828 scriptSig = scripts.pubKeyInput(pkSignature)
12834 // did we build a scriptSig?
12836 // wrap as scriptHash if necessary
12837 if (input.prevOutType === 'scripthash') {
12838 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12841 tx.setInputScript(index, scriptSig)
12848 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12849 assert(index in this.inputs, 'No input at index: ' + index)
12850 hashType = hashType || Transaction.SIGHASH_ALL
12852 var input = this.inputs[index]
12853 var canSign = input.hashType &&
12854 input.prevOutScript &&
12855 input.prevOutType &&
12857 input.scriptType &&
12860 // are we almost ready to sign?
12862 // if redeemScript was provided, enforce consistency
12863 if (redeemScript) {
12864 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12867 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12871 // must be pay-to-scriptHash?
12872 if (redeemScript) {
12873 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12874 if (input.prevOutScript) {
12875 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12877 var scriptHash = input.prevOutScript.chunks[
1]
12878 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12881 var scriptType = scripts.classifyOutput(redeemScript)
12882 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12885 switch (scriptType) {
12887 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12891 case 'pubkeyhash': {
12892 var pkh1 = redeemScript.chunks[
2]
12893 var pkh2 = privKey.pub.getAddress().hash
12895 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12896 pubKeys = [privKey.pub]
12901 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12906 if (!input.prevOutScript) {
12907 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12908 input.prevOutType = 'scripthash'
12911 input.pubKeys = pubKeys
12912 input.redeemScript = redeemScript
12913 input.scriptType = scriptType
12915 // cannot be pay-to-scriptHash
12917 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12919 // can we otherwise sign this?
12920 if (input.scriptType) {
12921 assert(input.pubKeys, input.scriptType + ' not supported')
12923 // we know nothin' Jon Snow, assume pubKeyHash
12925 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12926 input.prevOutType = 'pubkeyhash'
12927 input.pubKeys = [privKey.pub]
12928 input.scriptType = input.prevOutType
12932 input.hashType = hashType
12933 input.signatures = input.signatures || []
12936 var signatureScript = input.redeemScript || input.prevOutScript
12937 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12939 // enforce signature order matches public keys
12940 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12941 // maintain a local copy of unmatched signatures
12942 var unmatched = input.signatures.slice()
12944 input.signatures = input.pubKeys.map(function (pubKey) {
12947 // check for any matching signatures
12948 unmatched.some(function (signature, i) {
12949 if (!pubKey.verify(signatureHash, signature)) return false
12952 // remove matched signature from unmatched
12953 unmatched.splice(i,
1)
12958 return match || undefined
12962 // enforce in order signing of public keys
12963 assert(input.pubKeys.some(function (pubKey, i) {
12964 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12966 assert(!input.signatures[i], 'Signature already exists')
12967 var signature = privKey.sign(signatureHash)
12968 input.signatures[i] = signature
12971 }, this), 'privateKey cannot sign for this input')
12974 module.exports = TransactionBuilder
12976 }).call(this,require(
"buffer").Buffer)
12977 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12978 (function (Buffer){
12979 var assert = require('assert')
12980 var bufferutils = require('./bufferutils')
12981 var typeForce = require('typeforce')
12982 var networks = require('./networks')
12983 var randomBytes = require('randombytes')
12985 var Address = require('./address')
12986 var HDNode = require('./hdnode')
12987 var TransactionBuilder = require('./transaction_builder')
12988 var Script = require('./script')
12990 function Wallet (seed, network) {
12991 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12993 seed = seed || randomBytes(
32)
12994 network = network || networks.bitcoin
12996 // Stored in a closure to make accidental serialization less likely
12997 var masterKey = HDNode.fromSeedBuffer(seed, network)
12999 // HD first-level child derivation method should be hardened
13000 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
13001 var accountZero = masterKey.deriveHardened(
0)
13002 var externalAccount = accountZero.derive(
0)
13003 var internalAccount = accountZero.derive(
1)
13005 this.addresses = []
13006 this.changeAddresses = []
13007 this.network = network
13010 // FIXME: remove in
2.0.0
13011 this.unspentMap = {}
13013 // FIXME: remove in
2.0.0
13015 this.newMasterKey = function (seed) {
13016 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13018 seed = seed || randomBytes(
32)
13019 masterKey = HDNode.fromSeedBuffer(seed, network)
13021 accountZero = masterKey.deriveHardened(
0)
13022 externalAccount = accountZero.derive(
0)
13023 internalAccount = accountZero.derive(
1)
13026 me.changeAddresses = []
13032 this.getMasterKey = function () {
13035 this.getAccountZero = function () {
13038 this.getExternalAccount = function () {
13039 return externalAccount
13041 this.getInternalAccount = function () {
13042 return internalAccount
13046 Wallet.prototype.createTransaction = function (to, value, options) {
13047 // FIXME: remove in
2.0.0
13048 if (typeof options !== 'object') {
13049 if (options !== undefined) {
13050 console.warn('Non options object parameters are deprecated, use options object instead')
13053 fixedFee: arguments[
2],
13054 changeAddress: arguments[
3]
13059 options = options || {}
13061 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13063 var changeAddress = options.changeAddress
13064 var fixedFee = options.fixedFee
13065 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13067 // filter by minConf, then pending and sort by descending value
13068 var unspents = this.unspents.filter(function (unspent) {
13069 return unspent.confirmations
>= minConf
13070 }).filter(function (unspent) {
13071 return !unspent.pending
13072 }).sort(function (o1, o2) {
13073 return o2.value - o1.value
13078 var subTotal = value
13080 var txb = new TransactionBuilder()
13081 txb.addOutput(to, value)
13083 for (var i =
0; i < unspents.length; ++i) {
13084 var unspent = unspents[i]
13085 addresses.push(unspent.address)
13087 txb.addInput(unspent.txHash, unspent.index)
13089 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13091 accum += unspent.value
13092 subTotal = value + fee
13094 if (accum
>= subTotal) {
13095 var change = accum - subTotal
13097 if (change
> this.network.dustThreshold) {
13098 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13105 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13107 return this.signWith(txb, addresses).build()
13110 // FIXME: remove in
2.0.0
13111 Wallet.prototype.processPendingTx = function (tx) {
13112 this.__processTx(tx, true)
13115 // FIXME: remove in
2.0.0
13116 Wallet.prototype.processConfirmedTx = function (tx) {
13117 this.__processTx(tx, false)
13120 // FIXME: remove in
2.0.0
13121 Wallet.prototype.__processTx = function (tx, isPending) {
13122 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13124 var txId = tx.getId()
13125 var txHash = tx.getHash()
13127 tx.outs.forEach(function (txOut, i) {
13131 address = Address.fromOutputScript(txOut.script, this.network).toString()
13133 if (!(e.message.match(/has no matching Address/)))
13137 var myAddresses = this.addresses.concat(this.changeAddresses)
13138 if (myAddresses.indexOf(address)
> -
1) {
13139 var lookup = txId + ':' + i
13140 if (lookup in this.unspentMap) return
13142 // its unique, add it
13145 confirmations:
0, // no way to determine this without more information
13149 value: txOut.value,
13153 this.unspentMap[lookup] = unspent
13154 this.unspents.push(unspent)
13158 tx.ins.forEach(function (txIn) {
13159 // copy and convert to big-endian hex
13160 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13162 var lookup = txInId + ':' + txIn.index
13163 if (!(lookup in this.unspentMap)) return
13165 var unspent = this.unspentMap[lookup]
13168 unspent.pending = true
13169 unspent.spent = true
13171 delete this.unspentMap[lookup]
13173 this.unspents = this.unspents.filter(function (unspent2) {
13174 return unspent !== unspent2
13180 Wallet.prototype.generateAddress = function () {
13181 var k = this.addresses.length
13182 var address = this.getExternalAccount().derive(k).getAddress()
13184 this.addresses.push(address.toString())
13186 return this.getReceiveAddress()
13189 Wallet.prototype.generateChangeAddress = function () {
13190 var k = this.changeAddresses.length
13191 var address = this.getInternalAccount().derive(k).getAddress()
13193 this.changeAddresses.push(address.toString())
13195 return this.getChangeAddress()
13198 Wallet.prototype.getAddress = function () {
13199 if (this.addresses.length ===
0) {
13200 this.generateAddress()
13203 return this.addresses[this.addresses.length -
1]
13206 Wallet.prototype.getBalance = function (minConf) {
13207 minConf = minConf ||
0
13209 return this.unspents.filter(function (unspent) {
13210 return unspent.confirmations
>= minConf
13212 // FIXME: remove spent filter in
2.0.0
13213 }).filter(function (unspent) {
13214 return !unspent.spent
13215 }).reduce(function (accum, unspent) {
13216 return accum + unspent.value
13220 Wallet.prototype.getChangeAddress = function () {
13221 if (this.changeAddresses.length ===
0) {
13222 this.generateChangeAddress()
13225 return this.changeAddresses[this.changeAddresses.length -
1]
13228 Wallet.prototype.getInternalPrivateKey = function (index) {
13229 return this.getInternalAccount().derive(index).privKey
13232 Wallet.prototype.getPrivateKey = function (index) {
13233 return this.getExternalAccount().derive(index).privKey
13236 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13239 if ((index = this.addresses.indexOf(address))
> -
1) {
13240 return this.getPrivateKey(index)
13243 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13244 return this.getInternalPrivateKey(index)
13247 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13250 Wallet.prototype.getUnspentOutputs = function (minConf) {
13251 minConf = minConf ||
0
13253 return this.unspents.filter(function (unspent) {
13254 return unspent.confirmations
>= minConf
13256 // FIXME: remove spent filter in
2.0.0
13257 }).filter(function (unspent) {
13258 return !unspent.spent
13259 }).map(function (unspent) {
13261 address: unspent.address,
13262 confirmations: unspent.confirmations,
13263 index: unspent.index,
13264 txId: unspent.txId,
13265 value: unspent.value,
13267 // FIXME: remove in
2.0.0
13268 hash: unspent.txId,
13269 pending: unspent.pending
13274 Wallet.prototype.setUnspentOutputs = function (unspents) {
13275 this.unspentMap = {}
13276 this.unspents = unspents.map(function (unspent) {
13277 // FIXME: remove unspent.hash in
2.0.0
13278 var txId = unspent.txId || unspent.hash
13279 var index = unspent.index
13281 // FIXME: remove in
2.0.0
13282 if (unspent.hash !== undefined) {
13283 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13286 // FIXME: remove in
2.0.0
13287 if (index === undefined) {
13288 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13289 index = unspent.outputIndex
13292 typeForce('String', txId)
13293 typeForce('Number', index)
13294 typeForce('Number', unspent.value)
13296 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13297 assert.doesNotThrow(function () {
13298 Address.fromBase58Check(unspent.address)
13299 }, 'Expected Base58 Address, got ' + unspent.address)
13300 assert(isFinite(index), 'Expected finite index, got ' + index)
13302 // FIXME: remove branch in
2.0.0
13303 if (unspent.confirmations !== undefined) {
13304 typeForce('Number', unspent.confirmations)
13307 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13310 address: unspent.address,
13311 confirmations: unspent.confirmations ||
0,
13315 value: unspent.value,
13317 // FIXME: remove in
2.0.0
13318 pending: unspent.pending || false
13321 // FIXME: remove in
2.0.0
13322 this.unspentMap[txId + ':' + index] = unspent
13328 Wallet.prototype.signWith = function (tx, addresses) {
13329 addresses.forEach(function (address, i) {
13330 var privKey = this.getPrivateKeyForAddress(address)
13332 tx.sign(i, privKey)
13338 function estimatePaddedFee (tx, network) {
13339 var tmpTx = tx.clone()
13340 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13342 return network.estimateFee(tmpTx)
13345 // FIXME:
1.0.0 shims, remove in
2.0.0
13346 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13347 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13349 module.exports = Wallet
13351 }).call(this,require("buffer").Buffer)
13352 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13354 <script>bitcoin.networks.shadow = {
13355 magicPrefix: '\x19ShadowCash Signed Message:\n',
13357 public:
0xEE80286A,
13358 private:
0xEE8031E8
13365 estimateFee: function() { return "unused in this app" },
13368 bitcoin.networks.shadowtn = {
13369 magicPrefix: '\x19ShadowCash Signed Message:\n',
13371 public:
0x76C0FDFB,
13372 private:
0x76C1077A
13379 estimateFee: function() { return "unused in this app" },
13382 bitcoin.networks.clam = {
13384 public:
0xa8c26d64,
13385 private:
0xa8c17826
13391 bitcoin.networks.dash = {
13393 public:
0x0488b21e,
13394 private:
0x0488ade4
13401 bitcoin.networks.namecoin = {
13403 public:
0x0488b21e,
13404 private:
0x0488ade4
13407 //scriptHash:
0x10,
13411 bitcoin.networks.peercoin = {
13413 public:
0x0488b21e,
13414 private:
0x0488ade4
13417 //scriptHash:
0x10,
13422 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13426 /** @fileOverview Javascript cryptography implementation.
13428 * Crush to remove comments, shorten variable names and
13429 * generally reduce transmission size.
13431 * @author Emily Stark
13432 * @author Mike Hamburg
13433 * @author Dan Boneh
13437 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13438 /*global document, window, escape, unescape, module, require, Uint32Array */
13440 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13442 /** @namespace Symmetric ciphers. */
13445 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13448 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13451 /** @namespace Block cipher modes of operation. */
13454 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13458 * @namespace Bit array encoders and decoders.
13461 * The members of this namespace are functions which translate between
13462 * SJCL's bitArrays and other objects (usually strings). Because it
13463 * isn't always clear which direction is encoding and which is decoding,
13464 * the method names are "fromBits" and "toBits".
13468 /** @namespace Exceptions. */
13470 /** @constructor Ciphertext is corrupt. */
13471 corrupt: function(message) {
13472 this.toString = function() { return "CORRUPT: "+this.message; };
13473 this.message = message;
13476 /** @constructor Invalid parameter. */
13477 invalid: function(message) {
13478 this.toString = function() { return "INVALID: "+this.message; };
13479 this.message = message;
13482 /** @constructor Bug or missing feature in SJCL. @constructor */
13483 bug: function(message) {
13484 this.toString = function() { return "BUG: "+this.message; };
13485 this.message = message;
13488 /** @constructor Something isn't ready. */
13489 notReady: function(message) {
13490 this.toString = function() { return "NOT READY: "+this.message; };
13491 this.message = message;
13496 if(typeof module !== 'undefined' && module.exports){
13497 module.exports = sjcl;
13499 if (typeof define === "function") {
13500 define([], function () {
13508 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13510 * @author Emily Stark
13511 * @author Mike Hamburg
13512 * @author Dan Boneh
13515 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13519 * These objects are the currency accepted by SJCL's crypto functions.
13523 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13524 * but many of them can take arguments that are not a multiple of
4 bytes.
13525 * This library encodes arrays of bits (whose size need not be a multiple of
8
13526 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13527 * array of words,
32 bits at a time. Since the words are double-precision
13528 * floating point numbers, they fit some extra data. We use this (in a private,
13529 * possibly-changing manner) to encode the number of bits actually present
13530 * in the last word of the array.
13534 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13535 * to ciphers like AES which want arrays of words.
13540 * Array slices in units of bits.
13541 * @param {bitArray} a The array to slice.
13542 * @param {Number} bstart The offset to the start of the slice, in bits.
13543 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13544 * slice until the end of the array.
13545 * @return {bitArray} The requested slice.
13547 bitSlice: function (a, bstart, bend) {
13548 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13549 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13553 * Extract a number packed into a bit array.
13554 * @param {bitArray} a The array to slice.
13555 * @param {Number} bstart The offset to the start of the slice, in bits.
13556 * @param {Number} length The length of the number to extract.
13557 * @return {Number} The requested slice.
13559 extract: function(a, bstart, blength) {
13560 // FIXME: this Math.floor is not necessary at all, but for some reason
13561 // seems to suppress a bug in the Chromium JIT.
13562 var x, sh = Math.floor((-bstart-blength) &
31);
13563 if ((bstart + blength -
1 ^ bstart) & -
32) {
13564 // it crosses a boundary
13565 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13567 // within a single word
13568 x = a[bstart/
32|
0]
>>> sh;
13570 return x & ((
1<
<blength) -
1);
13574 * Concatenate two bit arrays.
13575 * @param {bitArray} a1 The first array.
13576 * @param {bitArray} a2 The second array.
13577 * @return {bitArray} The concatenation of a1 and a2.
13579 concat: function (a1, a2) {
13580 if (a1.length ===
0 || a2.length ===
0) {
13581 return a1.concat(a2);
13584 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13585 if (shift ===
32) {
13586 return a1.concat(a2);
13588 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13593 * Find the length of an array of bits.
13594 * @param {bitArray} a The array.
13595 * @return {Number} The length of a, in bits.
13597 bitLength: function (a) {
13598 var l = a.length, x;
13599 if (l ===
0) { return
0; }
13601 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13605 * Truncate an array.
13606 * @param {bitArray} a The array.
13607 * @param {Number} len The length to truncate to, in bits.
13608 * @return {bitArray} A new array, truncated to len bits.
13610 clamp: function (a, len) {
13611 if (a.length *
32 < len) { return a; }
13612 a = a.slice(
0, Math.ceil(len /
32));
13615 if (l
> 0 && len) {
13616 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13622 * Make a partial word for a bit array.
13623 * @param {Number} len The number of bits in the word.
13624 * @param {Number} x The bits.
13625 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13626 * @return {Number} The partial word.
13628 partial: function (len, x, _end) {
13629 if (len ===
32) { return x; }
13630 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13634 * Get the number of bits used by a partial word.
13635 * @param {Number} x The partial word.
13636 * @return {Number} The number of bits used by the partial word.
13638 getPartial: function (x) {
13639 return Math.round(x/
0x10000000000) ||
32;
13643 * Compare two arrays for equality in a predictable amount of time.
13644 * @param {bitArray} a The first array.
13645 * @param {bitArray} b The second array.
13646 * @return {boolean} true if a == b; false otherwise.
13648 equal: function (a, b) {
13649 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13653 for (i=
0; i
<a.length; i++) {
13659 /** Shift an array right.
13660 * @param {bitArray} a The array to shift.
13661 * @param {Number} shift The number of bits to shift.
13662 * @param {Number} [carry=
0] A byte to carry in
13663 * @param {bitArray} [out=[]] An array to prepend to the output.
13666 _shiftRight: function (a, shift, carry, out) {
13667 var i, last2=
0, shift2;
13668 if (out === undefined) { out = []; }
13670 for (; shift
>=
32; shift -=
32) {
13675 return out.concat(a);
13678 for (i=
0; i
<a.length; i++) {
13679 out.push(carry | a[i]
>>>shift);
13680 carry = a[i] << (
32-shift);
13682 last2 = a.length ? a[a.length-
1] :
0;
13683 shift2 = sjcl.bitArray.getPartial(last2);
13684 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13688 /** xor a block of
4 words together.
13691 _xor4: function(x,y) {
13692 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13695 /** byteswap a word array inplace.
13696 * (does not handle partial words)
13697 * @param {sjcl.bitArray} a word array
13698 * @return {sjcl.bitArray} byteswapped array
13700 byteswapM: function(a) {
13701 var i, v, m =
0xff00;
13702 for (i =
0; i < a.length; ++i) {
13704 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13711 //// codecString.js
13713 /** @fileOverview Bit array codec implementations.
13715 * @author Emily Stark
13716 * @author Mike Hamburg
13717 * @author Dan Boneh
13720 /** @namespace UTF-
8 strings */
13721 sjcl.codec.utf8String = {
13722 /** Convert from a bitArray to a UTF-
8 string. */
13723 fromBits: function (arr) {
13724 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13725 for (i=
0; i
<bl/
8; i++) {
13729 out += String.fromCharCode(tmp
>>> 24);
13732 return decodeURIComponent(escape(out));
13735 /** Convert from a UTF-
8 string to a bitArray. */
13736 toBits: function (str) {
13737 str = unescape(encodeURIComponent(str));
13738 var out = [], i, tmp=
0;
13739 for (i=
0; i
<str.length; i++) {
13740 tmp = tmp <<
8 | str.charCodeAt(i);
13747 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13756 /** @fileOverview Bit array codec implementations.
13758 * @author Emily Stark
13759 * @author Mike Hamburg
13760 * @author Dan Boneh
13763 /** @namespace Hexadecimal */
13765 /** Convert from a bitArray to a hex string. */
13766 fromBits: function (arr) {
13768 for (i=
0; i
<arr.length; i++) {
13769 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13771 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13773 /** Convert from a hex string to a bitArray. */
13774 toBits: function (str) {
13775 var i, out=[], len;
13776 str = str.replace(/\s|
0x/g,
"");
13778 str = str +
"00000000";
13779 for (i=
0; i
<str.length; i+=
8) {
13780 out.push(parseInt(str.substr(i,
8),
16)^
0);
13782 return sjcl.bitArray.clamp(out, len*
4);
13789 /** @fileOverview Javascript SHA-
512 implementation.
13791 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13792 * SJCL by Stefan Thomas.
13794 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13795 * Released with New BSD License
13797 * @author Emily Stark
13798 * @author Mike Hamburg
13799 * @author Dan Boneh
13800 * @author Jeff Mott
13801 * @author Stefan Thomas
13805 * Context for a SHA-
512 operation in progress.
13807 * @class Secure Hash Algorithm,
512 bits.
13809 sjcl.hash.sha512 = function (hash) {
13810 if (!this._key[
0]) { this._precompute(); }
13812 this._h = hash._h.slice(
0);
13813 this._buffer = hash._buffer.slice(
0);
13814 this._length = hash._length;
13821 * Hash a string or an array of words.
13823 * @param {bitArray|String} data the data to hash.
13824 * @return {bitArray} The hash value, an array of
16 big-endian words.
13826 sjcl.hash.sha512.hash = function (data) {
13827 return (new sjcl.hash.sha512()).update(data).finalize();
13830 sjcl.hash.sha512.prototype = {
13832 * The hash's block size, in bits.
13838 * Reset the hash state.
13841 reset:function () {
13842 this._h = this._init.slice(
0);
13849 * Input several words to the hash.
13850 * @param {bitArray|String} data the data to hash.
13853 update: function (data) {
13854 if (typeof data ===
"string") {
13855 data = sjcl.codec.utf8String.toBits(data);
13857 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13859 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13860 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13861 this._block(b.splice(
0,
32));
13867 * Complete hashing and output the hash value.
13868 * @return {bitArray} The hash value, an array of
16 big-endian words.
13870 finalize:function () {
13871 var i, b = this._buffer, h = this._h;
13873 // Round out and push the buffer
13874 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13876 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13877 for (i = b.length +
4; i &
31; i++) {
13881 // append the length
13884 b.push(Math.floor(this._length /
0x100000000));
13885 b.push(this._length |
0);
13888 this._block(b.splice(
0,
32));
13896 * The SHA-
512 initialization vector, to be precomputed.
13902 * Least significant
24 bits of SHA512 initialization values.
13904 * Javascript only has
53 bits of precision, so we compute the
40 most
13905 * significant bits and add the remaining
24 bits as constants.
13909 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13913 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13914 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13918 * The SHA-
512 hash key, to be precomputed.
13924 * Least significant
24 bits of SHA512 key values.
13928 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13929 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13930 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13931 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13932 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13933 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13934 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13935 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13936 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13937 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13941 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13942 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13943 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13944 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13945 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13946 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13947 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13948 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13949 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13950 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13951 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13952 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13953 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13954 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13955 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13956 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13957 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13958 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13959 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13960 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13964 * Function to precompute _init and _key.
13967 _precompute: function () {
13968 // XXX: This code is for precomputing the SHA256 constants, change for
13969 // SHA512 and re-enable.
13970 var i =
0, prime =
2, factor;
13972 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13973 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13975 outer: for (; i
<80; prime++) {
13976 for (factor=
2; factor*factor <= prime; factor++) {
13977 if (prime % factor ===
0) {
13984 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13985 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13987 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13988 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13994 * Perform one cycle of SHA-
512.
13995 * @param {bitArray} words one block of words.
13998 _block:function (words) {
14000 w = words.slice(
0),
14003 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
14004 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
14005 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
14006 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
14008 // Working variables
14009 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14010 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14011 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14012 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14014 for (i=
0; i
<80; i++) {
14015 // load up the input word for this round
14018 wrl = w[i *
2 +
1];
14021 var gamma0xh = w[(i-
15) *
2];
14022 var gamma0xl = w[(i-
15) *
2 +
1];
14024 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
14025 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
14028 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
14029 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
14030 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
14033 var gamma1xh = w[(i-
2) *
2];
14034 var gamma1xl = w[(i-
2) *
2 +
1];
14036 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
14037 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
14040 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
14041 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
14042 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
14045 var wr7h = w[(i-
7) *
2];
14046 var wr7l = w[(i-
7) *
2 +
1];
14048 var wr16h = w[(i-
16) *
2];
14049 var wr16l = w[(i-
16) *
2 +
1];
14051 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
14052 wrl = gamma0l + wr7l;
14053 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14055 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14057 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14061 w[i*
2 +
1] = wrl |=
0;
14064 var chh = (eh & fh) ^ (~eh & gh);
14065 var chl = (el & fl) ^ (~el & gl);
14068 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14069 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14072 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14073 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14076 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14077 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14081 var krl = k[i*
2+
1];
14083 // t1 = h + sigma1 + ch + K(round) + W(round)
14084 var t1l = hl + sigma1l;
14085 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14087 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14089 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14090 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14091 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14093 // t2 = sigma0 + maj
14094 var t2l = sigma0l + majl;
14095 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14097 // Update working variables
14104 el = (dl + t1l) |
0;
14105 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14112 al = (t1l + t2l) |
0;
14113 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14116 // Intermediate hash
14117 h0l = h[
1] = (h0l + al) |
0;
14118 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14119 h1l = h[
3] = (h1l + bl) |
0;
14120 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14121 h2l = h[
5] = (h2l + cl) |
0;
14122 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14123 h3l = h[
7] = (h3l + dl) |
0;
14124 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14125 h4l = h[
9] = (h4l + el) |
0;
14126 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14127 h5l = h[
11] = (h5l + fl) |
0;
14128 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14129 h6l = h[
13] = (h6l + gl) |
0;
14130 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14131 h7l = h[
15] = (h7l + hl) |
0;
14132 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14139 /** @fileOverview HMAC implementation.
14141 * @author Emily Stark
14142 * @author Mike Hamburg
14143 * @author Dan Boneh
14146 /** HMAC with the specified hash function.
14148 * @param {bitArray} key the key for HMAC.
14149 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14151 sjcl.misc.hmac = function (key, Hash) {
14152 this._hash = Hash = Hash || sjcl.hash.sha256;
14153 var exKey = [[],[]], i,
14154 bs = Hash.prototype.blockSize /
32;
14155 this._baseHash = [new Hash(), new Hash()];
14157 if (key.length
> bs) {
14158 key = Hash.hash(key);
14161 for (i=
0; i
<bs; i++) {
14162 exKey[
0][i] = key[i]^
0x36363636;
14163 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14166 this._baseHash[
0].update(exKey[
0]);
14167 this._baseHash[
1].update(exKey[
1]);
14168 this._resultHash = new Hash(this._baseHash[
0]);
14171 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14172 * @param {bitArray|String} data The data to mac.
14174 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14175 if (!this._updated) {
14177 return this.digest(data);
14179 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14183 sjcl.misc.hmac.prototype.reset = function () {
14184 this._resultHash = new this._hash(this._baseHash[
0]);
14185 this._updated = false;
14188 sjcl.misc.hmac.prototype.update = function (data) {
14189 this._updated = true;
14190 this._resultHash.update(data);
14193 sjcl.misc.hmac.prototype.digest = function () {
14194 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14205 /** @fileOverview Password-based key-derivation function, version
2.0.
14207 * @author Emily Stark
14208 * @author Mike Hamburg
14209 * @author Dan Boneh
14212 /** Password-Based Key-Derivation Function, version
2.0.
14214 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14216 * This is the method specified by RSA's PKCS #
5 standard.
14218 * @param {bitArray|String} password The password.
14219 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14220 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14221 * @param {Number} [length] The length of the derived key. Defaults to the
14222 output size of the hash function.
14223 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14224 * @return {bitArray} the derived key.
14226 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14227 count = count ||
1000;
14229 if (length <
0 || count <
0) {
14230 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14233 if (typeof password ===
"string") {
14234 password = sjcl.codec.utf8String.toBits(password);
14237 if (typeof salt ===
"string") {
14238 salt = sjcl.codec.utf8String.toBits(salt);
14241 Prff = Prff || sjcl.misc.hmac;
14243 var prf = new Prff(password),
14244 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14246 for (k =
1;
32 * out.length < (length ||
1); k++) {
14247 u = ui = prf.encrypt(b.concat(salt,[k]));
14249 for (i=
1; i
<count; i++) {
14250 ui = prf.encrypt(ui);
14251 for (j=
0; j
<ui.length; j++) {
14256 out = out.concat(u);
14259 if (length) { out = b.clamp(out, length); }
14267 /** @fileOverview Javascript SHA-
256 implementation.
14269 * An older version of this implementation is available in the public
14270 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14271 * Stanford University
2008-
2010 and BSD-licensed for liability
14274 * Special thanks to Aldo Cortesi for pointing out several bugs in
14277 * @author Emily Stark
14278 * @author Mike Hamburg
14279 * @author Dan Boneh
14283 * Context for a SHA-
256 operation in progress.
14285 * @class Secure Hash Algorithm,
256 bits.
14287 sjcl.hash.sha256 = function (hash) {
14288 if (!this._key[
0]) { this._precompute(); }
14290 this._h = hash._h.slice(
0);
14291 this._buffer = hash._buffer.slice(
0);
14292 this._length = hash._length;
14299 * Hash a string or an array of words.
14301 * @param {bitArray|String} data the data to hash.
14302 * @return {bitArray} The hash value, an array of
16 big-endian words.
14304 sjcl.hash.sha256.hash = function (data) {
14305 return (new sjcl.hash.sha256()).update(data).finalize();
14308 sjcl.hash.sha256.prototype = {
14310 * The hash's block size, in bits.
14316 * Reset the hash state.
14319 reset:function () {
14320 this._h = this._init.slice(
0);
14327 * Input several words to the hash.
14328 * @param {bitArray|String} data the data to hash.
14331 update: function (data) {
14332 if (typeof data ===
"string") {
14333 data = sjcl.codec.utf8String.toBits(data);
14335 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14337 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14338 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14339 this._block(b.splice(
0,
16));
14345 * Complete hashing and output the hash value.
14346 * @return {bitArray} The hash value, an array of
8 big-endian words.
14348 finalize:function () {
14349 var i, b = this._buffer, h = this._h;
14351 // Round out and push the buffer
14352 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14354 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14355 for (i = b.length +
2; i &
15; i++) {
14359 // append the length
14360 b.push(Math.floor(this._length /
0x100000000));
14361 b.push(this._length |
0);
14364 this._block(b.splice(
0,
16));
14372 * The SHA-
256 initialization vector, to be precomputed.
14377 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14381 * The SHA-
256 hash key, to be precomputed.
14387 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14388 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14389 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14390 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14391 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14392 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14393 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14394 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14399 * Function to precompute _init and _key.
14402 _precompute: function () {
14403 var i =
0, prime =
2, factor;
14405 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14407 outer: for (; i
<64; prime++) {
14408 for (factor=
2; factor*factor <= prime; factor++) {
14409 if (prime % factor ===
0) {
14416 this._init[i] = frac(Math.pow(prime,
1/
2));
14418 this._key[i] = frac(Math.pow(prime,
1/
3));
14424 * Perform one cycle of SHA-
256.
14425 * @param {bitArray} words one block of words.
14428 _block:function (words) {
14430 w = words.slice(
0),
14433 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14434 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14436 /* Rationale for placement of |
0 :
14437 * If a value can overflow is original
32 bits by a factor of more than a few
14438 * million (
2^
23 ish), there is a possibility that it might overflow the
14439 *
53-bit mantissa and lose precision.
14441 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14442 * propagates around the loop, and on the hash state h[]. I don't believe
14443 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14444 * (for h4 anyway), and better safe than sorry.
14446 * The clamps on h[] are necessary for the output to be correct even in the
14447 * common case and for short inputs.
14449 for (i=
0; i
<64; i++) {
14450 // load up the input word for this round
14454 a = w[(i+
1 ) &
15];
14455 b = w[(i+
14) &
15];
14456 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14457 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14458 w[i&
15] + w[(i+
9) &
15]) |
0;
14461 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14464 h7 = h6; h6 = h5; h5 = h4;
14466 h3 = h2; h2 = h1; h1 = h0;
14468 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14471 h[
0] = h[
0]+h0 |
0;
14472 h[
1] = h[
1]+h1 |
0;
14473 h[
2] = h[
2]+h2 |
0;
14474 h[
3] = h[
3]+h3 |
0;
14475 h[
4] = h[
4]+h4 |
0;
14476 h[
5] = h[
5]+h5 |
0;
14477 h[
6] = h[
6]+h6 |
0;
14478 h[
7] = h[
7]+h7 |
0;
14482 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14483 WORDLISTS["english"] = [
14484 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14485 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14486 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14487 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14488 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14489 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14490 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14491 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14492 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14493 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14494 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14495 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14496 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14497 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14498 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14499 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14500 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14501 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14502 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14503 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14504 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14505 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14506 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14507 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14508 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14509 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14510 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14511 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14512 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14513 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14514 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14515 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14516 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14517 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14518 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14519 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14520 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14521 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14522 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14523 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14524 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14525 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14526 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14527 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14528 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14529 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14530 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14531 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14532 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14533 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14534 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14535 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14536 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14537 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14538 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14539 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14540 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14541 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14542 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14543 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14544 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14545 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14546 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14547 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14548 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14549 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14550 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14551 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14552 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14553 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14554 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14555 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14556 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14557 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14558 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14559 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14560 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14561 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14562 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14563 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14564 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14565 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14566 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14567 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14568 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14569 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14570 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14571 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14572 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14573 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14574 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14575 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14576 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14577 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14578 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14579 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14580 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14581 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14582 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14583 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14584 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14585 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14586 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14587 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14588 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14589 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14590 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14591 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14592 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14593 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14594 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14595 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14596 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14597 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14598 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14599 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14600 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14601 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14602 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14603 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14604 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14605 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14606 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14607 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14608 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14609 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14610 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14611 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14612 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14613 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14614 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14615 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14616 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14617 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14618 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14619 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14620 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14621 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14622 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14623 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14624 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14625 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14626 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14627 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14628 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14629 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14630 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14631 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14632 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14633 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14634 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14635 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14636 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14637 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14638 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14639 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14640 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14641 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14642 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14643 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14644 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14645 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14646 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14647 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14648 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14649 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14650 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14651 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14652 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14653 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14654 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14655 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14656 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14657 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14658 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14659 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14660 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14661 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14662 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14663 "thank","that","theme","then","theory","there","they","thing","this","thought",
14664 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14665 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14666 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14667 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14668 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14669 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14670 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14671 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14672 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14673 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14674 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14675 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14676 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14677 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14678 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14679 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14680 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14681 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14682 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14683 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14684 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14685 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14686 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14687 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14688 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14690 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14691 WORDLISTS["japanese"] = [
14692 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14693 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14694 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14695 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14696 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14697 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14698 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14699 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14700 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14701 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14702 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14703 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14704 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14705 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14706 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14707 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14708 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14709 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14710 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14711 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14712 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14713 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14714 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14715 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14716 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14717 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14718 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14719 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14720 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14721 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14722 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14723 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14724 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14725 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14726 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14727 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14728 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14729 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14730 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14731 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14732 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14733 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14734 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14735 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14736 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14737 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14738 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14739 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14740 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14741 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14742 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14743 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14744 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
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 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14898 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14899 WORDLISTS["spanish"] = [
14900 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14901 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14902 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14903 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14904 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14905 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14906 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14907 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14908 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14909 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14910 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14911 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14912 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14913 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14914 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14915 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14916 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14917 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14918 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14919 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14920 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14921 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14922 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14923 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14924 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14925 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14926 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14927 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14928 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14929 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14930 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14931 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14932 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14933 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14934 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14935 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14936 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14937 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14938 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14939 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14940 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14941 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14942 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14943 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14944 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14945 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14946 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14947 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14948 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14949 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14950 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14951 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14952 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14953 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14954 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14955 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14956 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14957 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14958 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14959 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14960 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14961 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14962 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14963 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14964 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14965 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14966 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14967 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14968 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14969 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14970 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14971 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14972 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14973 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14974 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14975 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14976 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14977 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14978 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14979 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14980 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14981 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14982 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14983 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14984 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14985 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14986 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14987 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14988 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14989 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14990 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14991 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14992 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
14993 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
14994 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
14995 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
14996 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
14997 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
14998 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
14999 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15000 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15001 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15002 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15003 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15004 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15005 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15006 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15007 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15008 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15009 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15010 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15011 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15012 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15013 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15014 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15015 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15016 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15017 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15018 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15019 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15020 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15021 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15022 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15023 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15024 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15025 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15026 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15027 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15028 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15029 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15030 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15031 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15032 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15033 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15034 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15035 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15036 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15037 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15038 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15039 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15040 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15041 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15042 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15043 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15044 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15045 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15046 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15047 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15048 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15049 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15050 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15051 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15052 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15053 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15054 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15055 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15056 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15057 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15058 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15059 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15060 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15061 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15062 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15063 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15064 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15065 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15066 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15067 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15068 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15069 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15070 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15071 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15072 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15073 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15074 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15075 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15076 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15077 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15078 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15079 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15080 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15081 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15082 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15083 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15084 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15085 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15086 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15087 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15088 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15089 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15090 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15091 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15092 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15093 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15094 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15095 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15096 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15097 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15098 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15099 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15100 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15101 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15102 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15103 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15104 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15106 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15107 WORDLISTS["chinese_simplified"] = [
15108 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15109 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15110 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15111 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15112 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15113 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15114 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15115 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15116 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15117 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15118 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15119 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15120 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15121 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15122 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15123 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15124 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15125 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15126 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15127 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15128 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15129 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15130 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15131 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15132 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15133 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15134 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15135 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15136 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15137 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15138 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15139 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15140 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15141 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15142 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15143 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15144 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15145 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15146 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15147 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15148 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15149 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15150 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15151 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15152 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15153 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15154 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15155 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15156 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15157 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15158 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15159 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15160 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
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 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15314 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15315 WORDLISTS["chinese_traditional"] = [
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 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15366 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15367 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15368 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
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 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15522 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15523 WORDLISTS["french"] = [
15524 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15525 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15526 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15527 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15528 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15529 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15530 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15531 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15532 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15533 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15534 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15535 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15536 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15537 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15538 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15539 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15540 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15541 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15542 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15543 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15544 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15545 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15546 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15547 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15548 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15549 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15550 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15551 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15552 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15553 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15554 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15555 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15556 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15557 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15558 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15559 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15560 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15561 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15562 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15563 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15564 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15565 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15566 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15567 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15568 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15569 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15570 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15571 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15572 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15573 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15574 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15575 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15576 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15577 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15578 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15579 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15580 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15581 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15582 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15583 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15584 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15585 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15586 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15587 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15588 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15589 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15590 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15591 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15592 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15593 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15594 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15595 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15596 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15597 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15598 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15599 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15600 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15601 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15602 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15603 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15604 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15605 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15606 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15607 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15608 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15609 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15610 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15611 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15612 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15613 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15614 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15615 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15616 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15617 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15618 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15619 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15620 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15621 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15622 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15623 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15624 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15625 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15626 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15627 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15628 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15629 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15630 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15631 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15632 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15633 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15634 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15635 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15636 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15637 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15638 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15639 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15640 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15641 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15642 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15643 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15644 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15645 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15646 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15647 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15648 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15649 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15650 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15651 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15652 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15653 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15654 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15655 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15656 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15657 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15658 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15659 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15660 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15661 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15662 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15663 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15664 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15665 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15666 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15667 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15668 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15669 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15670 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15671 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15672 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15673 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15674 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15675 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15676 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15677 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15678 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15679 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15680 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15681 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15682 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15683 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15684 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15685 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15686 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15687 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15688 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15689 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15690 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15691 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15692 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15693 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15694 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15695 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15696 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15697 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15698 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15699 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15700 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15701 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15702 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15703 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15704 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15705 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15706 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15707 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15708 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15709 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15710 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15711 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15712 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15713 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15714 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15715 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15716 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15717 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15718 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15719 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15720 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15721 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15722 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15723 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15724 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15725 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15726 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15727 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15728 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15730 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15731 WORDLISTS["italian"] = [
15732 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15733 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15734 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15735 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15736 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15737 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15738 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15739 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15740 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15741 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15742 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15743 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15744 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15745 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15746 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15747 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15748 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15749 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15750 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15751 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15752 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15753 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15754 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15755 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15756 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15757 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15758 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15759 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15760 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15761 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15762 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15763 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15764 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15765 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15766 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15767 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15768 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15769 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15770 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15771 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15772 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15773 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15774 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15775 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15776 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15777 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15778 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15779 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15780 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15781 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15782 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15783 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15784 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15785 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15786 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15787 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15788 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15789 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15790 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15791 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15792 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15793 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15794 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15795 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15796 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15797 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15798 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15799 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15800 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15801 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15802 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15803 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15804 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15805 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15806 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15807 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15808 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15809 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15810 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15811 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15812 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15813 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15814 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15815 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15816 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15817 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15818 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15819 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15820 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15821 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15822 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15823 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15824 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15825 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15826 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15827 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15828 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15829 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15830 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15831 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15832 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15833 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15834 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15835 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15836 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15837 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15838 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15839 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15840 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15841 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15842 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15843 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15844 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15845 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15846 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15847 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15848 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15849 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15850 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15851 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15852 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15853 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15854 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15855 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15856 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15857 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15858 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15859 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15860 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15861 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15862 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15863 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15864 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15865 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15866 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15867 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15868 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15869 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15870 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15871 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15872 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15873 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15874 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15875 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15876 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15877 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15878 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15879 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15880 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15881 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15882 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15883 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15884 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15885 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15886 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15887 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15888 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15889 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15890 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15891 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15892 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15893 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15894 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15895 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15896 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15897 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15898 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15899 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15900 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15901 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15902 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15903 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15904 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15905 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15906 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15907 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15908 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15909 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15910 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15911 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15912 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15913 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15914 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15915 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15916 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15917 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15918 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15919 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15920 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15921 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15922 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15923 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15924 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15925 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15926 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15927 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15928 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15929 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15930 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15931 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15932 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15933 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15934 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15935 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15936 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15939 * Copyright (c)
2013 Pavol Rusnak
15941 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15942 * this software and associated documentation files (the "Software"), to deal in
15943 * the Software without restriction, including without limitation the rights to
15944 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15945 * of the Software, and to permit persons to whom the Software is furnished to do
15946 * so, subject to the following conditions:
15948 * The above copyright notice and this permission notice shall be included in all
15949 * copies or substantial portions of the Software.
15951 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15952 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15953 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15954 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15955 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15956 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15960 * Javascript port from python by Ian Coleman
15962 * Requires code from sjcl
15963 * https://github.com/bitwiseshiftleft/sjcl
15966 var Mnemonic = function(language) {
15968 var PBKDF2_ROUNDS =
2048;
15974 var hmacSHA512 = function(key) {
15975 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15976 this.encrypt = function() {
15977 return hasher.encrypt.apply(hasher, arguments);
15982 wordlist = WORDLISTS[language];
15983 if (wordlist.length != RADIX) {
15984 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15989 self.generate = function(strength) {
15990 strength = strength ||
128;
15991 var r = strength %
32;
15993 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
15995 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
15996 if (!hasStrongCrypto) {
15997 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
15999 var buffer = new Uint8Array(strength /
8);
16000 var data = crypto.getRandomValues(buffer);
16001 return self.toMnemonic(data);
16004 self.toMnemonic = function(byteArray) {
16005 if (byteArray.length %
4 > 0) {
16006 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
16009 //h = hashlib.sha256(data).hexdigest()
16010 var data = byteArrayToWordArray(byteArray);
16011 var hash = sjcl.hash.sha256.hash(data);
16012 var h = sjcl.codec.hex.fromBits(hash);
16014 // b is a binary string, eg '
00111010101100...'
16015 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
16016 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
16018 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
16019 // c = bin(int(h,
16))[
2:].zfill(
256)
16020 // d = c[:len(data) *
8 /
32]
16021 var a = byteArrayToBinaryString(byteArray);
16022 var c = zfill(hexStringToBinaryString(h),
256);
16023 var d = c.substring(
0, byteArray.length *
8 /
32);
16024 // b = line1 + line2
16028 var blen = b.length /
11;
16029 for (var i=
0; i
<blen; i++) {
16030 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
16031 result.push(wordlist[idx]);
16033 return self.joinWords(result);
16036 self.check = function(mnemonic) {
16037 var mnemonic = self.splitWords(mnemonic);
16038 if (mnemonic.length %
3 > 0) {
16041 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
16043 for (var i=
0; i
<mnemonic.length; i++) {
16044 var word = mnemonic[i];
16045 var wordIndex = wordlist.indexOf(word);
16046 if (wordIndex == -
1) {
16049 var binaryIndex = zfill(wordIndex.toString(
2),
11);
16050 idx.push(binaryIndex);
16052 var b = idx.join('');
16054 //d = b[:l /
33 *
32]
16056 var d = b.substring(
0, l /
33 *
32);
16057 var h = b.substring(l - l /
33, l);
16058 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
16059 var nd = binaryStringToWordArray(d);
16060 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
16061 var ndHash = sjcl.hash.sha256.hash(nd);
16062 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16063 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
16064 var nh = ndBstr.substring(
0,l/
33);
16068 self.toSeed = function(mnemonic, passphrase) {
16069 passphrase = passphrase || '';
16070 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16071 passphrase = self.normalizeString(passphrase)
16072 passphrase =
"mnemonic" + passphrase;
16073 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16074 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16075 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
16076 var hashHex = sjcl.codec.hex.fromBits(result);
16080 self.splitWords = function(mnemonic) {
16081 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16084 self.joinWords = function(words) {
16085 // Set space correctly depending on the language
16086 // see https://github.com/bitcoin/bips/blob/master/bip-
0039/bip-
0039-wordlists.md#japanese
16088 if (language ==
"japanese") {
16089 space =
"\u3000"; // ideographic space
16091 return words.join(space);
16094 self.normalizeString = function(str) {
16095 if (typeof str.normalize ==
"function") {
16096 return str.normalize(
"NFKD");
16099 // TODO decide how to handle this in the future.
16100 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16105 function byteArrayToWordArray(data) {
16107 for (var i=
0; i
<data.length/
4; i++) {
16109 v += data[i*
4 +
0] <<
8 *
3;
16110 v += data[i*
4 +
1] <<
8 *
2;
16111 v += data[i*
4 +
2] <<
8 *
1;
16112 v += data[i*
4 +
3] <<
8 *
0;
16118 function byteArrayToBinaryString(data) {
16120 for (var i=
0; i
<data.length; i++) {
16121 bin += zfill(data[i].toString(
2),
8);
16126 function hexStringToBinaryString(hexString) {
16128 for (var i=
0; i
<hexString.length; i++) {
16129 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
16131 return binaryString;
16134 function binaryStringToWordArray(binary) {
16135 var aLen = binary.length /
32;
16137 for (var i=
0; i
<aLen; i++) {
16138 var valueStr = binary.substring(
0,
32);
16139 var value = parseInt(valueStr,
2);
16141 binary = binary.slice(
32);
16146 // Pad a numeric string on the left with zero digits until the given width
16148 // Note this differs to the python implementation because it does not
16149 // handle numbers starting with a sign.
16150 function zfill(source, length) {
16151 source = source.toString();
16152 while (source.length < length) {
16153 source = '
0' + source;
16162 <script>(function() {
16164 // mnemonics is populated as required by getLanguage
16165 var mnemonics = { "english": new Mnemonic("english") };
16166 var mnemonic = mnemonics["english"];
16168 var bip32RootKey = null;
16169 var bip32ExtendedKey = null;
16170 var network = bitcoin.networks.bitcoin;
16171 var addressRowTemplate = $("#address-row-template");
16173 var showIndex = true;
16174 var showAddress = true;
16175 var showPrivKey = true;
16177 var phraseChangeTimeoutEvent = null;
16178 var rootKeyChangedTimeoutEvent = null;
16181 DOM.network = $(".network");
16182 DOM.phraseNetwork = $("#network-phrase");
16183 DOM.phrase = $(".phrase");
16184 DOM.passphrase = $(".passphrase");
16185 DOM.generate = $(".generate");
16186 DOM.seed = $(".seed");
16187 DOM.rootKey = $(".root-key");
16188 DOM.extendedPrivKey = $(".extended-priv-key");
16189 DOM.extendedPubKey = $(".extended-pub-key");
16190 DOM.bip32tab = $("#bip32-tab");
16191 DOM.bip44tab = $("#bip44-tab");
16192 DOM.bip32panel = $("#bip32");
16193 DOM.bip44panel = $("#bip44");
16194 DOM.bip32path = $("#bip32-path");
16195 DOM.bip44path = $("#bip44-path");
16196 DOM.bip44purpose = $("#bip44 .purpose");
16197 DOM.bip44coin = $("#bip44 .coin");
16198 DOM.bip44account = $("#bip44 .account");
16199 DOM.bip44change = $("#bip44 .change");
16200 DOM.strength = $(".strength");
16201 DOM.hardenedAddresses = $(".hardened-addresses");
16202 DOM.addresses = $(".addresses");
16203 DOM.rowsToAdd = $(".rows-to-add");
16204 DOM.more = $(".more");
16205 DOM.feedback = $(".feedback");
16206 DOM.tab = $(".derivation-type a");
16207 DOM.indexToggle = $(".index-toggle");
16208 DOM.addressToggle = $(".address-toggle");
16209 DOM.privateKeyToggle = $(".private-key-toggle");
16210 DOM.languages = $(".languages a");
16214 DOM.network.on("change", networkChanged);
16215 DOM.phrase.on("input", delayedPhraseChanged);
16216 DOM.passphrase.on("input", delayedPhraseChanged);
16217 DOM.generate.on("click", generateClicked);
16218 DOM.more.on("click", showMore);
16219 DOM.rootKey.on("input", delayedRootKeyChanged);
16220 DOM.bip32path.on("input", calcForDerivationPath);
16221 DOM.bip44purpose.on("input", calcForDerivationPath);
16222 DOM.bip44coin.on("input", calcForDerivationPath);
16223 DOM.bip44account.on("input", calcForDerivationPath);
16224 DOM.bip44change.on("input", calcForDerivationPath);
16225 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
16226 DOM.hardenedAddresses.on("change", calcForDerivationPath);
16227 DOM.indexToggle.on("click", toggleIndexes);
16228 DOM.addressToggle.on("click", toggleAddresses);
16229 DOM.privateKeyToggle.on("click", togglePrivateKeys);
16230 DOM.languages.on("click", languageChanged);
16233 hideValidationError();
16234 populateNetworkSelect();
16239 function networkChanged(e) {
16240 var networkIndex = e.target.value;
16241 networks[networkIndex].onSelect();
16242 if (seed != null) {
16250 function delayedPhraseChanged() {
16251 hideValidationError();
16253 if (phraseChangeTimeoutEvent != null) {
16254 clearTimeout(phraseChangeTimeoutEvent);
16256 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
16259 function phraseChanged() {
16261 hideValidationError();
16262 setMnemonicLanguage();
16263 // Get the mnemonic phrase
16264 var phrase = DOM.phrase.val();
16265 var errorText = findPhraseErrors(phrase);
16267 showValidationError(errorText);
16270 // Calculate and display
16271 var passphrase = DOM.passphrase.val();
16272 calcBip32RootKeyFromSeed(phrase, passphrase);
16273 calcForDerivationPath();
16277 function delayedRootKeyChanged() {
16278 // Warn if there is an existing mnemonic or passphrase.
16279 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
16280 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
16281 DOM.rootKey.val(bip32RootKey);
16285 hideValidationError();
16287 // Clear existing mnemonic and passphrase
16288 DOM.phrase.val(
"");
16289 DOM.passphrase.val(
"");
16291 if (rootKeyChangedTimeoutEvent != null) {
16292 clearTimeout(rootKeyChangedTimeoutEvent);
16294 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
16297 function rootKeyChanged() {
16299 hideValidationError();
16300 // Validate the root key TODO
16301 var rootKeyBase58 = DOM.rootKey.val();
16302 var errorText = validateRootKey(rootKeyBase58);
16304 showValidationError(errorText);
16307 // Calculate and display
16308 calcBip32RootKeyFromBase58(rootKeyBase58);
16309 calcForDerivationPath();
16313 function calcForDerivationPath() {
16315 hideValidationError();
16316 // Get the derivation path
16317 var derivationPath = getDerivationPath();
16318 var errorText = findDerivationPathErrors(derivationPath);
16320 showValidationError(errorText);
16323 calcBip32ExtendedKey(derivationPath);
16324 displayBip32Info();
16328 function generateClicked() {
16331 setTimeout(function() {
16332 setMnemonicLanguage();
16333 var phrase = generateRandomPhrase();
16341 function languageChanged() {
16342 setTimeout(function() {
16343 setMnemonicLanguage();
16344 if (DOM.phrase.val().length
> 0) {
16345 var newPhrase = convertPhraseToNewLanguage();
16346 DOM.phrase.val(newPhrase);
16350 DOM.generate.trigger(
"click");
16355 function toggleIndexes() {
16356 showIndex = !showIndex;
16357 $(
"td.index span").toggleClass(
"invisible");
16360 function toggleAddresses() {
16361 showAddress = !showAddress;
16362 $(
"td.address span").toggleClass(
"invisible");
16365 function togglePrivateKeys() {
16366 showPrivKey = !showPrivKey;
16367 $(
"td.privkey span").toggleClass(
"invisible");
16372 function generateRandomPhrase() {
16373 if (!hasStrongRandom()) {
16374 var errorText =
"This browser does not support strong randomness";
16375 showValidationError(errorText);
16378 var numWords = parseInt(DOM.strength.val());
16379 var strength = numWords /
3 *
32;
16380 var words = mnemonic.generate(strength);
16381 DOM.phrase.val(words);
16385 function calcBip32RootKeyFromSeed(phrase, passphrase) {
16386 seed = mnemonic.toSeed(phrase, passphrase);
16387 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
16390 function calcBip32RootKeyFromBase58(rootKeyBase58) {
16391 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
16394 function calcBip32ExtendedKey(path) {
16395 bip32ExtendedKey = bip32RootKey;
16396 // Derive the key from the path
16397 var pathBits = path.split(
"/");
16398 for (var i=
0; i
<pathBits.length; i++) {
16399 var bit = pathBits[i];
16400 var index = parseInt(bit);
16401 if (isNaN(index)) {
16404 var hardened = bit[bit.length-
1] ==
"'";
16406 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16409 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16414 function showValidationError(errorText) {
16420 function hideValidationError() {
16426 function findPhraseErrors(phrase) {
16427 // TODO make this right
16428 // Preprocess the words
16429 phrase = mnemonic.normalizeString(phrase);
16430 var words = phraseToWordArray(phrase);
16432 for (var i=
0; i
<words.length; i++) {
16433 var word = words[i];
16434 var language = getLanguage();
16435 if (WORDLISTS[language].indexOf(word) == -
1) {
16436 console.log(
"Finding closest match to " + word);
16437 var nearestWord = findNearestWord(word);
16438 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
16441 // Check the words are valid
16442 var properPhrase = wordArrayToPhrase(words);
16443 var isValid = mnemonic.check(properPhrase);
16445 return
"Invalid mnemonic";
16450 function validateRootKey(rootKeyBase58) {
16452 bitcoin.HDNode.fromBase58(rootKeyBase58);
16455 return
"Invalid root key";
16460 function getDerivationPath() {
16461 if (DOM.bip44tab.hasClass(
"active")) {
16462 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
16463 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
16464 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
16465 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
16467 path += purpose +
"'/";
16468 path += coin +
"'/";
16469 path += account +
"'/";
16471 DOM.bip44path.val(path);
16472 var derivationPath = DOM.bip44path.val();
16473 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
16474 return derivationPath;
16476 else if (DOM.bip32tab.hasClass(
"active")) {
16477 var derivationPath = DOM.bip32path.val();
16478 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
16479 return derivationPath;
16482 console.log(
"Unknown derivation path");
16486 function findDerivationPathErrors(path) {
16487 // TODO is not perfect but is better than nothing
16489 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
16491 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
16492 var maxDepth =
255; // TODO verify this!!
16493 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
16494 if (path[
0] !=
"m") {
16495 return
"First character must be 'm'";
16497 if (path.length
> 1) {
16498 if (path[
1] !=
"/") {
16499 return
"Separator must be '/'";
16501 var indexes = path.split(
"/");
16502 if (indexes.length
> maxDepth) {
16503 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16505 for (var depth =
1; depth
<indexes.length; depth++) {
16506 var index = indexes[depth];
16507 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
16508 if (invalidChars.length
> 0) {
16509 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
16511 var indexValue = parseInt(index.replace(
"'",
""));
16512 if (isNaN(depth)) {
16513 return
"Invalid number at depth " + depth;
16515 if (indexValue
> maxIndexValue) {
16516 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16523 function displayBip32Info() {
16525 DOM.seed.val(seed);
16526 var rootKey = bip32RootKey.toBase58();
16527 DOM.rootKey.val(rootKey);
16528 var extendedPrivKey = bip32ExtendedKey.toBase58();
16529 DOM.extendedPrivKey.val(extendedPrivKey);
16530 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16531 DOM.extendedPubKey.val(extendedPubKey);
16532 // Display the addresses and privkeys
16533 clearAddressesList();
16534 displayAddresses(
0,
20);
16537 function displayAddresses(start, total) {
16538 for (var i=
0; i
<total; i++) {
16539 var index = i + start;
16540 new TableRow(index);
16544 function TableRow(index) {
16546 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
16552 function calculateValues() {
16553 setTimeout(function() {
16555 if (useHardenedAddresses) {
16556 key = bip32ExtendedKey.deriveHardened(index);
16559 key = bip32ExtendedKey.derive(index);
16561 var address = key.getAddress().toString();
16562 var privkey = key.privKey.toWIF(network);
16563 var indexText = getDerivationPath() +
"/" + index;
16564 if (useHardenedAddresses) {
16565 indexText = indexText +
"'";
16567 addAddressToList(indexText, address, privkey);
16575 function showMore() {
16576 var start = DOM.addresses.children().length;
16577 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16578 if (isNaN(rowsToAdd)) {
16580 DOM.rowsToAdd.val(
"20");
16582 if (rowsToAdd
> 200) {
16583 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
16584 msg +=
"Do you want to continue?";
16585 if (!confirm(msg)) {
16589 displayAddresses(start, rowsToAdd);
16592 function clearDisplay() {
16593 clearAddressesList();
16595 hideValidationError();
16598 function clearAddressesList() {
16599 DOM.addresses.empty();
16602 function clearKey() {
16603 DOM.rootKey.val(
"");
16604 DOM.extendedPrivKey.val(
"");
16605 DOM.extendedPubKey.val(
"");
16608 function addAddressToList(indexText, address, privkey) {
16609 var row = $(addressRowTemplate.html());
16611 var indexCell = row.find(
".index span");
16612 var addressCell = row.find(
".address span");
16613 var privkeyCell = row.find(
".privkey span");
16615 indexCell.text(indexText);
16616 addressCell.text(address);
16617 privkeyCell.text(privkey);
16620 indexCell.addClass(
"invisible");
16622 if (!showAddress) {
16623 addressCell.addClass(
"invisible");
16625 if (!showPrivKey) {
16626 privkeyCell.addClass(
"invisible");
16628 DOM.addresses.append(row);
16631 function hasStrongRandom() {
16632 return 'crypto' in window && window['crypto'] !== null;
16635 function disableForms() {
16636 $(
"form").on(
"submit", function(e) {
16637 e.preventDefault();
16641 function parseIntNoNaN(val, defaultVal) {
16642 var v = parseInt(val);
16649 function showPending() {
16651 .text(
"Calculating...")
16655 function findNearestWord(word) {
16656 var language = getLanguage();
16657 var words = WORDLISTS[language];
16658 var minDistance =
99;
16659 var closestWord = words[
0];
16660 for (var i=
0; i
<words.length; i++) {
16661 var comparedTo = words[i];
16662 var distance = Levenshtein.get(word, comparedTo);
16663 if (distance < minDistance) {
16664 closestWord = comparedTo;
16665 minDistance = distance;
16668 return closestWord;
16671 function hidePending() {
16677 function populateNetworkSelect() {
16678 for (var i=
0; i
<networks.length; i++) {
16679 var network = networks[i];
16680 var option = $(
"<option>");
16681 option.attr(
"value", i);
16682 option.text(network.name);
16683 DOM.phraseNetwork.append(option);
16687 function getLanguage() {
16688 var defaultLanguage =
"english";
16689 // Try to get from existing phrase
16690 var language = getLanguageFromPhrase();
16691 // Try to get from url if not from phrase
16692 if (language.length ==
0) {
16693 language = getLanguageFromUrl();
16695 // Default to English if no other option
16696 if (language.length ==
0) {
16697 language = defaultLanguage;
16702 function getLanguageFromPhrase(phrase) {
16703 // Check if how many words from existing phrase match a language.
16706 phrase = DOM.phrase.val();
16708 if (phrase.length
> 0) {
16709 var words = phraseToWordArray(phrase);
16710 var languageMatches = {};
16711 for (l in WORDLISTS) {
16712 // Track how many words match in this language
16713 languageMatches[l] =
0;
16714 for (var i=
0; i
<words.length; i++) {
16715 var wordInLanguage = WORDLISTS[l].indexOf(words[i])
> -
1;
16716 if (wordInLanguage) {
16717 languageMatches[l]++;
16720 // Find languages with most word matches.
16721 // This is made difficult due to commonalities between Chinese
16722 // simplified vs traditional.
16723 var mostMatches =
0;
16724 var mostMatchedLanguages = [];
16725 for (var l in languageMatches) {
16726 var numMatches = languageMatches[l];
16727 if (numMatches
> mostMatches) {
16728 mostMatches = numMatches;
16729 mostMatchedLanguages = [l];
16731 else if (numMatches == mostMatches) {
16732 mostMatchedLanguages.push(l);
16736 if (mostMatchedLanguages.length
> 0) {
16737 // Use first language and warn if multiple detected
16738 language = mostMatchedLanguages[
0];
16739 if (mostMatchedLanguages.length
> 1) {
16740 console.warn(
"Multiple possible languages");
16741 console.warn(mostMatchedLanguages);
16748 function getLanguageFromUrl() {
16749 return window.location.hash.substring(
1);
16752 function setMnemonicLanguage() {
16753 var language = getLanguage();
16754 // Load the bip39 mnemonic generator for this language if required
16755 if (!(language in mnemonics)) {
16756 mnemonics[language] = new Mnemonic(language);
16758 mnemonic = mnemonics[language];
16761 function convertPhraseToNewLanguage() {
16762 var oldLanguage = getLanguageFromPhrase();
16763 var newLanguage = getLanguageFromUrl();
16764 var oldPhrase = DOM.phrase.val();
16765 var oldWords = phraseToWordArray(oldPhrase);
16767 for (var i=
0; i
<oldWords.length; i++) {
16768 var oldWord = oldWords[i];
16769 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16770 var newWord = WORDLISTS[newLanguage][index];
16771 newWords.push(newWord);
16773 newPhrase = wordArrayToPhrase(newWords);
16777 // TODO look at jsbip39 - mnemonic.splitWords
16778 function phraseToWordArray(phrase) {
16779 var words = phrase.split(/\s/g);
16781 for (var i=
0; i
<words.length; i++) {
16782 var word = words[i];
16783 if (word.length
> 0) {
16784 noBlanks.push(word);
16790 // TODO look at jsbip39 - mnemonic.joinWords
16791 function wordArrayToPhrase(words) {
16792 var phrase = words.join(
" ");
16793 var language = getLanguageFromPhrase(phrase);
16794 if (language ==
"japanese") {
16795 phrase = words.join(
"\u3000");
16803 onSelect: function() {
16804 network = bitcoin.networks.bitcoin;
16805 DOM.bip44coin.val(
0);
16809 name:
"Bitcoin Testnet",
16810 onSelect: function() {
16811 network = bitcoin.networks.testnet;
16812 DOM.bip44coin.val(
1);
16817 onSelect: function() {
16818 network = bitcoin.networks.litecoin;
16819 DOM.bip44coin.val(
2);
16824 onSelect: function() {
16825 network = bitcoin.networks.dogecoin;
16826 DOM.bip44coin.val(
3);
16830 name:
"ShadowCash",
16831 onSelect: function() {
16832 network = bitcoin.networks.shadow;
16833 DOM.bip44coin.val(
35);
16837 name:
"ShadowCash Testnet",
16838 onSelect: function() {
16839 network = bitcoin.networks.shadowtn;
16840 DOM.bip44coin.val(
1);
16845 onSelect: function() {
16846 network = bitcoin.networks.viacoin;
16847 DOM.bip44coin.val(
14);
16851 name:
"Viacoin Testnet",
16852 onSelect: function() {
16853 network = bitcoin.networks.viacointestnet;
16854 DOM.bip44coin.val(
1);
16859 onSelect: function() {
16860 network = bitcoin.networks.jumbucks;
16861 DOM.bip44coin.val(
26);
16866 onSelect: function() {
16867 network = bitcoin.networks.clam;
16868 DOM.bip44coin.val(
23);
16873 onSelect: function() {
16874 network = bitcoin.networks.dash;
16875 DOM.bip44coin.val(
5);
16880 onSelect: function() {
16881 network = bitcoin.networks.namecoin;
16882 DOM.bip44coin.val(
7);
16887 onSelect: function() {
16888 network = bitcoin.networks.peercoin;
16889 DOM.bip44coin.val(
6);